一个Master节点,三个Worker节点.
HostName | IP |
---|---|
k8s-master01 | 172.16.11.71 |
k8s-node01 | 172.16.11.81 |
k8s-node02 | 172.16.11.82 |
k8s-node03 | 172.16.11.83 |
kubeadm部署k8s要求所有主机上预先安装有docker环境。
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl start docker && systemctl enable docker
注意:若IPtables规则在安装docker前没有清除,可以在安装完docker后清除规则然后重启docker服务。
默认安装docker的cgroup dirve为cgroupfs ,需要将其改为systemd
cat << EOF >> /etc/docker/daemon.json
{
"registry-mirrors": ["https://gy97ij1m.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload
systemctl restart docker
部署k8s要求在各节点上部署以下组件:
但是本次是以k8s官方提供的kubeadm来进行部署,kubeadm将每一个组件运行为pod的方式来部署,因此在master节点上也需要部署docker和kubelet。
所以每个节点都需要部署docker,kubelet,kubeadm。主节点上还需要部署kubectl。
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-cache madison kubeadm
在所有节点上安装kubeadm、kubectl、kubelet
# 本次安装选择1.21.1-00版本进行安装
apt-get install kubeadm=1.21.2-00 kubectl=1.21.2-00 kubelet=1.21.2-00 -y
# 设置为开机启动
systemctl enable kubelet
安装完kubeadm后需要先对初始化集群的控制平面,但是在初始化之前,需要将所有节点注册到DNS中,确保主机名能被DNS解析,此处使用hosts文件直接做解析。
cat << EOF >> /etc/hosts
172.16.11.71 k8s-master01 kube-api
172.16.11.81 k8s-node01
172.16.11.82 k8s-node02
172.16.11.83 k8s-node03
EOF
使用kubeadm init初始化集群。
kubeadm init --apiserver-advertise-address=172.16.11.71 \
--control-plane-endpoint=kube-api \
--kubernetes-version=v1.21.2 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
# --image-repository:为指定镜像仓库
# --kubernetes-version:指定k8s的版本,版本需要和kubeadm版本一致
# --control-plane-endpoint:用来告诉所有客户端链接控制端时使用什么主机名。
# --apiserver-advertise-address:指定apiserver的地址和端口,端口不指定默认为6443
# --pod-network-cidr:用来指定哪段网络地址用来给容器内pod的网段地址。
# 不同的网络地址,其默认的地址也不一样。
# flannl: 默认10.244.0.0/16
# calico: 默认192.168.0.0/16
初始化集群会做很多步骤:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
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/
You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
# 此为添加控制平面的命令
kubeadm join kube-api:6443 --token 4oo3c2.ur24gwcotgi9pwt8 \
--discovery-token-ca-cert-hash sha256:0a2facf32492adf109c3eb0d45fa03e27b080298e3ae7ee4ef7063052c8cd626 \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
# 此为添加worker节点的命令
kubeadm join kube-api:6443 --token 4oo3c2.ur24gwcotgi9pwt8 \
--discovery-token-ca-cert-hash sha256:0a2facf32492adf109c3eb0d45fa03e27b080298e3ae7ee4ef7063052c8cd626
在用户家目录下创建出config
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装flannel网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
使用令牌将各work节点加入到k8s集群中
kubeadm join kube-api:6443 --token 4oo3c2.ur24gwcotgi9pwt8 \
--discovery-token-ca-cert-hash sha256:0a2facf32492adf109c3eb0d45fa03e27b080298e3ae7ee4ef7063052c8cd626
查看各节点状态
root@k8s-master01:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready control-plane,master 17m v1.21.1
k8s-node01 Ready <none> 2m51s v1.21.1
k8s-node02 Ready <none> 2m46s v1.21.1
k8s-node03 Ready <none> 2m43s v1.21.1
# 各节点STATUS状态均为Ready,k8s节点部署完毕。