安装kubelet、kubeadm、kubectl

在3台服务器上安装

#配置kubernetes源
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

#安装kubernetes
sudo yum install -y kubelet-1.23.5 kubeadm-1.23.5 kubectl-1.23.5 --disableexcludes=kubernetes --nogpgcheck

#设置开机启动
sudo systemctl enable --now kubelet

下载k8s需要使用到的镜像

sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.23.5
kube-proxy:v1.23.5
kube-controller-manager:v1.23.5
kube-scheduler:v1.23.5
coredns:v1.8.6
etcd:3.5.1-0
pause:3.6
)
for imageName in ${images[@]} ; do
docker pull registry.aliyuncs.com/google_containers/$imageName
done
EOF

#开始下载
chmod +x ./images.sh && ./images.sh


#所有机器添加master域名映射,以下需要修改为自己master节点的ip
echo "192.168.99.200  cluster-endpoint" >> /etc/hosts

主节点初始化master(只在k8s-node1上执行)

kubeadm init \
--apiserver-advertise-address=192.168.99.200 \
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.5 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=172.31.0.0/16 \
--ignore-preflight-errors=all


#service-cidr是service层的ip范围,pod-network-cidr是pod层的ip范围,注意所有网络范围不重叠
#由于master节点的ip是192.168.99.200,pod-network-cidr的ip地址范围不能与master节点的地址重叠,修改成172.31.0.0

执行成功后,会显示以下内容

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 innnad.cuew0pzpwa39k4xz \
    --discovery-token-ca-cert-hash sha256:c16136023c964d93c69cbad06a6f29b98d25a05b4f98c477f9c6ba8f014d15df \
    --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 innnad.cuew0pzpwa39k4xz \
    --discovery-token-ca-cert-hash sha256:c16136023c964d93c69cbad06a6f29b98d25a05b4f98c477f9c6ba8f014d15df 

在主节点中执行:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

在主节点中查询节点状态

#节点状态为NotReady,还需要在主节点中安装网络配置
kubectl get nodes

#运行中的应用在docker里面叫容器,在k8s里面叫Pod。等待除coredns之外的pod状态变更成Running
kubectl get pods -A

安装网络组件(在master执行)

curl https://docs.projectcalico.org/manifests/calico.yaml -O

#注意:pod-network-cidr中的ip需要与calico.yaml中的ip一致,查找到192.168.0.0修改成172.31.0.0
#特别注意:在windows中使用notepad编写yaml再导入到centos中,执行时可能会出现一些问题
cat calico.yaml |grep 192.168
vi calico.yaml
            - name: CALICO_IPV4POOL_CIDR
              value: "172.31.0.0/16"


kubectl apply -f calico.yaml

#再次查询主节点的状态,等待pod都处于Running状态
kubectl get nodes
kubectl get pods -A

加入子节点

在k8s-node2、k8s-node3中执行命令,把2个节点加入到集群中(使用kubeadm init中产生的token,token有效期24小时)

kubeadm join cluster-endpoint:6443 --token innnad.cuew0pzpwa39k4xz \
    --discovery-token-ca-cert-hash sha256:c16136023c964d93c69cbad06a6f29b98d25a05b4f98c477f9c6ba8f014d15df 

在master查看所有节点信息,等待所有节点处于Ready状态,pod都处于Running状态

kubectl get nodes
kubectl get pods -A

3台服务器重启,看下是否能正常自动启动

reboot
kubectl get nodes
kubectl get pods -A

重新生成k8s token

kubeadm init生成的token在24小时内有效,如果过期了,生成新令牌
kubeadm token create --print-join-command


掉电后kubernetes无法启动异常

kubectl get nodes -o wide
#The connection to the server cluster-endpoint:6443 was refused - did you specify the right host or port?

#尝试在主节点重启kubelet
systemctl restart kubelet
kubectl get nodes -o wide

docker ps -a | grep api
docker logs -f b93e39360cd1
#ransport: Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused". Reconnecting...
#etcd连接不上

docker ps -a | grep etcd
docker logs -f 84ed32a41a6c
#recovering backend from snapshot error: failed to find database snapshot file (snap: snapshot file doesn't exist)
#掉电导致etcd文件损坏,etcd需要定期备份数据

参考:
掉电后kubernetes无法启动异常


卸载k8s

#删除k8s组件
kubectl delete node --all
kubeadm reset -f

#卸载kubelet,kubectl 
yum remove kubelet kubectl kubeadm -y

#删除相关的配置文件
rm -rf $HOME/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/cni
rm -rf /var/lib/etcd

#删除其它容器和所有镜像
docker kill $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi -f $(docker images -q)

#docker重启
systemctl daemon-reload
systemctl restart docker
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐