前置工作(每个节点)
cat >> /etc/hosts << EOF
172.27.16.7 k8s-node2
172.27.16.11 k8s-node1
172.27.16.3 k8s-master
EOF
根据规划设置主机名
hostnamectl set-hostname <hostname>
软件安装(每个节点)
docker-ce
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
配置镜像加速
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl restart docker
docker info #查看docker信息,进行确认
kubelet
每个节点都执行
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
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.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
初始化
kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1.23.0 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
这一步的最后会输出如下结果,在从节点上执行这个就可以添加从节点。
kubeadm join 172.27.16.3:6443 --token jtkmc3.9w86k4w23yhf63uj \
--discovery-token-ca-cert-hash sha256:30563fd70cc449044a4ec33b21f69cd46bcd1bd4b60626dc4e616c34fbdced6f
免sudo操作
在master节点执行操作,这样就可以直接敲kubectl命令了
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
此时状态还是NotReady,因为还没有部署网络组件
[root@VM-16-7-centos yum.repos.d]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vm-16-7-centos NotReady control-plane,master 5m37s v1.23.0
网络组件
在主节点执行
下载文件
wget https://docs.projectcalico.org/v3.24/manifests/calico.yaml --no-check-certificate
填写初始化时候用的ip:10.244.0.0/16
执行命令
kubectl apply -f calico.yaml
这个组件是各个节点的pod用来做网络通信的,符合CNI标准的网络插件,给每个Pod生成一个唯一的IP地址,并且把每个节点当做一个路由器。
查看结果
[root@VM-16-7-centos yum.repos.d]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-66966888c4-bnbzb 1/1 Running 0 5m34s
calico-node-qzktw 1/1 Running 0 5m34s
coredns-65c54cc984-98fxm 1/1 Running 0 20m
coredns-65c54cc984-kg7sk 1/1 Running 0 20m
etcd-vm-16-7-centos 1/1 Running 0 20m
kube-apiserver-vm-16-7-centos 1/1 Running 0 20m
kube-controller-manager-vm-16-7-centos 1/1 Running 0 20m
kube-proxy-h98ch 1/1 Running 0 20m
kube-scheduler-vm-16-7-centos 1/1 Running 0 20m
节点的状态变成了ready
[root@VM-16-7-centos yum.repos.d]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vm-16-7-centos Ready control-plane,master 25m v1.23.0
添加从节点
在从节点上执行
kubeadm join 172.27.16.3/:6443 --token jtkmc3.9w86k4w23yhf63uj \
--discovery-token-ca-cert-hash sha256:30563fd70cc449044a4ec33b21f69cd46bcd1bd4b60626dc4e616c34fbdced6f
查看添加后的结果
[root@VM-16-7-centos yum.repos.d]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vm-16-11-centos NotReady <none> 20s v1.23.0
vm-16-3-centos Ready <none> 8m57s v1.23.0
vm-16-7-centos Ready control-plane,master 52m v1.23.0