我们使用“公有云-青云”提供的服务器作为今天的演示操作。准备三台机器,一个主控节点,两个工作节点。
Kubernetes集群的安装需要依赖于容器化的运行环境,所以我们首先要在每一个节点上安装docker。方法参考我之前的文章。
所有机器执行以下操作。
hostnamectl set-hostname xxxx
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
# 配置镜像仓库地址
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
# 下载指定版本
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
# 立即/开机自启动
sudo systemctl enable --now kubelet
完成了这一步,kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环
下载各个机器需要的镜像
# 编写脚本,指定每个组件需要的版本等内容
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF
# 添加可执行权限并执行脚本进行下载。
chmod +x ./images.sh && ./images.sh
通过这个步骤可以将创建集群所需的组件下载下来。工作节点只需要下载kube-proxy
即可,全部下载也没有关系。
#所有机器添加master域名映射
echo "172.31.0.2 cluster-endpoint" >> /etc/hosts
这一步的目的是告诉每一个节点我将哪一个节点作为主节点(集群入口)。这里需要修改为自己的ip,我这里使用公有云的内网ip。
#主节点初始化,只在主节点运行此命令
kubeadm init \
--apiserver-advertise-address=172.31.0.2 \
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16
这里其实是定义了我将来在创建service和pod的时候所使用的网络段。需要注意apiserver-advertise-address
为自己的主节点ip,并且要保证所有网络范围不重叠。pod-network-cidr
如果有修改后面我们还需要修改网络组件的网络范围。
出现以下内容说明集群master节点初始化成功。
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 cluster-endpoint:6443 --token xsmvuy.43k3verg00x4s5gs \
--discovery-token-ca-cert-hash sha256:2d4a06dfe981eb1274831a027690fdfa3a6c89d0968af331d6d26c16f35e7bdb \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join cluster-endpoint:6443 --token xsmvuy.43k3verg00x4s5gs \
--discovery-token-ca-cert-hash sha256:2d4a06dfe981eb1274831a027690fdfa3a6c89d0968af331d6d26c16f35e7bdb
我们按照提示执行相应的命令即可。
# 只在主节点运行此命令
curl https://docs.projectcalico.org/manifests/calico.yaml -O
kubectl apply -f calico.yaml
# 只在工作节点运行此命令
kubeadm join cluster-endpoint:6443 --token xsmvuy.43k3verg00x4s5gs \
--discovery-token-ca-cert-hash sha256:2d4a06dfe981eb1274831a027690fdfa3a6c89d0968af331d6d26c16f35e7bdb
这些内容还是根据提示信息来做。
补充:上面token有效时间为24小时,过期之后使用以下命令在主节点重新生成。
kubeadm token create --print-join-command
高可用部署方式,也是在这一步的时候,使用添加主节点的命令即可.
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 89m v1.20.9
k8s-worker1 Ready <none> 68m v1.20.9
k8s-worker2 Ready <none> 68m v1.20.9
[root@k8s-master ~]#
至此,一个kubernetes集群搭建完毕。
本文由 mdnice 多平台发布