一、环境
1、 前置知识点
目前生产部署Kubernetes 集群主要有两种方式:
kubeadm:
Kubeadm 是一个K8s 部署工具,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes 集群。
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
二进制包:
从github 下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。
Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes 集群,
虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。
------------------------------ 我这里是使用Kubeadm来构建Kubernetes 集群 ---------------------------------------------
kubeadm 部署方式介绍:
kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:
1、创建一个Master 节点kubeadm init
2、将Node 节点加入到当前集群中$ kubeadm join <Master 节点的IP 和端口>
2、虚拟机准备:
三台虚拟机,master node01 node02
操作系统CentOS7.5
安装选 基础服务器安装 (这样一些基础软件就会自动安装,如 chrony软件)
可以访问外网,需要拉取镜像(yum源最好换成国内的,如 阿里源)
二、系统初始化
1、 设置系统主机名:
hostnamectl set-hostname master
hostnamectl set-hostname node01
hostnamectl set-hostname node02
2、设置主机解析:
cat <<EOF>> /etc/hosts
192.168.200.201 master
192.168.200.202 node01
192.168.200.203 node02
EOF
3.关闭和禁用防火墙、selinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
4、关闭swap和禁用swap(提升系统的性能)
swapoff -a && sed -i 's/^.*centos-swap/#&/g' /etc/fstab
5、模块设置和内核参数
# 激活 br_netfilter 模块(加载网桥过滤模块)
modprobe br_netfilter
# 内核参数设置:开启IP转发,允许iptables对bridge的数据进行处理(添加网桥过滤和地址转发功能)
cat << EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
# 立即生效
sysctl --system
6、集群时间同步(K8s集群中的节点时间必须一致,这里直接使用chronyd服务从网络同步时间):
systemctl start chronyd && systemctl enable chronyd
三、安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2 #安装辅助软件包
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #设置阿里云docker镜像地址为存储库(官方镜像地址是国外网,比较慢)
yum install -y docker-ce-19.03.13 #安装docker社区版(指明版本,不安装阿里源上的最新版,避免出现兼容性问题)
systemctl enable docker && systemctl start docker
配置 docker 的镜像加速器、cgroup 驱动及存储驱动程序。
cat << EOF > /etc/docker/daemon.json
{
"registry-mirrors": ["去阿里云上找自己的镜像加速器网址"], 参考:https://blog.csdn.net/qq_52807660/article/details/121174340
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload
systemctl restart docker
Kubernetes 推荐使用 systemd 来代替 cgroupfs。因为 docker 容器默认 cgroup 驱动为 cgroupfs,而 kubelet 默认为 systemd,
所以为了使系统更为稳定,容器和 kubelet 应该都使用 systemd 作为 cgroup 驱动。
四、安装 kubeadm
配置K8s的yum源:
不过由于官方源位于国外,可能无法访问或者速度超慢,可以使用国内的 yum 源像阿里源、清华大学源等。
这里使用阿里源:
cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.18.1 kubeadm-1.18.1 kubectl-1.18.1 #安装K8s集群软件包(指明版本,不安装阿里源上的最新版,避免出现兼容性问题)
systemctl enable kubelet && systemctl start kubelet
--------------------------------- 以上操作,在master node01 node02 都操作 --------------------------------------
五、部署Kubernetes(master节点操作)
[root@master ~]# kubeadm init --apiserver-advertise-address=192.168.200.201 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.18.1 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
选项说明:
--apiserver-advertise-address:主节点的 IP 地址
--image-repository:选择用于拉取镜像的镜像仓库,这里配置为阿里云的镜像仓库
--kubernetes-version:安装的k8s版本
--service-cidr:为服务的VIP指定使用的IP地址范围(默认为“10.96.0.0/12”)
--pod-network-cidr:指定Pod网络的IP地址范围。如果设置,则将自动为每个节点分配CIDR。
注:
因为后面要部署 flannel,参照flannel文档,我们要指定Pod网络的IP地址范围为10.244.0.0/16
下面是部分输出内容,可以看到初始化成功的信息和一些提示。
............................
............................
[addons] Applied essential addon: kube-proxy
Your Kubernetes control-plane has initialized successfully! #表明Kubernetes控制平面已成功初始化!
To start using your cluster, you need to run the following as a regular user: #要开始使用集群,要在master节点先运行这三句命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster. #怎样创建网络
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.200.201:6443 --token 7fzqs6.qpnqzss6kpuis00b \
--discovery-token-ca-cert-hash sha256:a2233758942ce550d48421bc943b8e3b5e7f504f8c0419a47e22c83040c70721
#想要把那个节点加入K8s集群,就在那个节点上运行这句命令
创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
把node01 和 node02 加入K8s集群后的状态是这样的:
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 2m53s v1.18.1
node01 NotReady <none> 9s v1.18.1
node02 NotReady <none> 4s v1.18.1
此时的状态并没有集群成功,需要安装第三方网络插件
六、安装网络插件(master节点操作)
K8s支持多种网络插件,比如flannel、calico、canal等等,任选一种即可,本次选择flannel
# 安装网络插件
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 查看flannel状态(可能要等个30秒,flannel状态才能运行)
[root@master ~]# kubectl get pods -A | grep flannel
kube-system kube-flannel-ds-lxvdp 1/1 Running 0 5h49m
kube-system kube-flannel-ds-p2jfl 1/1 Running 0 5h49m
kube-system kube-flannel-ds-snb5n 1/1 Running 0 5h49m
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 5m31s v1.18.1
node01 Ready <none> 2m47s v1.18.1
node02 Ready <none> 2m42s v1.18.1
集群成功!!!
七、测试kubernetes 集群(master节点操作)
[root@master ~]# kubectl create deployment nginx --image=nginx 部署nginx服务集群
deployment.apps/nginx created
[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort 开放80端口
service/nginx exposed
[root@master ~]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-f89759699-2rb8x 0/1 ContainerCreating 0 17s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6m36s
service/nginx NodePort 10.98.48.54 <none> 80:32341/TCP 8s
[root@master ~]# curl localhost:32341 本地访问
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
kubernetes 集群 可用!!!!
版权声明:本文为qq_52807660原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。