知方号

知方号

K8S 1.24.0安装步骤(踩坑无数的总结)

K8S 1.24.0安装步骤

前言

官方文档:https://kubernetes.io/zh-cn/docs/home Kubernetes 1.24的发布日期从2023年4 月 19 日 移至 5 月 3 日,现已正式发布。此版本带来了 46 项增强。在这个版本中,最大的变动是从kubelet中移除dockershim,这是确保 Kubernetes 项目未来的必要步骤。从1.24开始,大家需要使用其他受到支持的运行时选项(例如containerd或CRI-O);如果您选择Docker Engine作为运行时,则需要使用cri-dockerd。

我的机器IP: 10.0.12.8 master 10.0.12.15 node1 10.0.12.9 node2

安装版本: k8s 1.24.0 docker-ce 20.10.18 (当前最新版本) cri-docker v0.2.5 (当前最新版本) CentOS 7.6 腾讯云轻量应用服务器

第一步:基础设置

1、查看Linux系统版本 cat /etc/*-release uname -r

2、关闭防火墙 systemctl disable firewalld #开机禁用 systemctl stop firewalld #停止

验证防火墙是否关闭成功 systemctl status firewalld

3、关闭Selinux setenforce 0 && sed -i ‘s/enforcing/disabled/’ /etc/selinux/config #永久

验证Selinux是否关闭成功 getenforce 或者 sestatus

4、关闭swap swapoff -a && sed -ri ‘s/.swap./#&/’ /etc/fstab

可通过 free -m查看swap的状态,swap的total值应为0

5、根据规划设置主机名 hostnamectl set-hostname master hostnamectl set-hostname node1 hostnamectl set-hostname node2

6、在各台机中添加hosts (坑1:hostname不能使用-和.以外的特殊字符) cat > /etc/hosts /etc/sysctl.d/k8s.conf /etc/sysconfig/modules/ipvs.modules /etc/docker/daemon.json init-config.yaml 打开该文件查看,修改镜像仓库: 将imageRepository: k8s.gcr.io 修改为 imageRepository: registry.aliyuncs.com/google_containers

2、根据第一步的配置文件,拉取镜像 kubeadm config images pull --config=init-config.yaml

第二种方式拉取镜像

1、查询需要的镜像和版本 kubeadm config images list --kubernetes-version=v1.24.0 结果用于2写脚本

2、写个脚本下载所有需要的镜像 在/home下保存文件vi down_images.sh #!/bin/bash images_list=’ registry.aliyuncs.com/google_containers/kube-apiserver:v1.24.0 registry.aliyuncs.com/google_containers/kube-controller-manager:v1.24.0 registry.aliyuncs.com/google_containers/kube-scheduler:v1.24.0 registry.aliyuncs.com/google_containers/kube-proxy:v1.24.0 registry.aliyuncs.com/google_containers/pause:3.7 registry.aliyuncs.com/google_containers/etcd:3.5.3-0 registry.aliyuncs.com/google_containers/coredns:v1.8.6’ for i in $images_list do docker pull $i done

设置文件权限 chmod 755 /home/down_images.sh 执行脚本 sh /home/down_images.sh 查看镜像下载情况 docker images

3、Master机需要2的所有镜像,工作节点只需要下面两个镜像 kube-proxy pause

第六步:部署Kubernetes Master

1、执行核心的安装命令 (初始化,只在master机执行)

kubeadm init --kubernetes-version=1.24.0 --apiserver-advertise-address 10.0.12.8 --apiserver-bind-port=6443 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --image-repository registry.aliyuncs.com/google_containers --cri-socket unix:///var/run/cri-dockerd.sock --v=5

–v=5 或 --v=10 是输出控制台信息的等级,便于排查错误。

–apiserver-advertise-address为master机的IP # --service-cidr 是svc的IP段 # --pod-network-cidr 是pod的IP段,IP地址后面的斜杠24表示掩码位是24位的,即用32位二进制表示的子网掩码中有连续的24个【1】,如【11111111 11111111 11111111 00000000】,将其转化为十进制,就是【255.255.255.0】 # Your Kubernetes control-plane has initialized successfully! 出现这句话,说明安装成功。

安装回滚 kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock

2、执行1步命令提示的第一个动作 (只在master机执行) mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown ( i d − u ) : (id -u): (id−u):(id -g) $HOME/.kube/config

export KUBECONFIG=/etc/kubernetes/admin.conf

3、重启所有master和node机器

第七步:安装网路插件Calico 只在master执行,还有另外一个插件Flannel,如有兴趣,可去了解一下。

1、安装证书 如没安装,下一步下载的时候,可能会报错。 yum install -y ca-certificates

2、安装operator wget https://docs.projectcalico.org/manifests/tigera-operator.yaml kubectl create -f tigera-operator.yaml

3、安装Calico wget https://docs.projectcalico.org/manifests/custom-resources.yaml

修改文件custom-resources.yaml的第十三行: cidr: 192.168.0.0/16 改为 cidr: 10.244.0.0/16 (这是kubeadm init时设置的–pod-network-cidr参数) kubectl create -f custom-resources.yaml

4、查看,确保每个pod的STATUS都是Running(要等稍久点) watch kubectl get pods -n calico-system

5、删除master上的taint kubectl taint nodes --all node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master- 它应该返回以下内容 node/ untainted

6、查看节点 kubectl get nodes -o wide 它应该返回以下内容

7、恭喜!您现在拥有一个带有Calico的单主机Kubernetes集群 官方文档地址:https://projectcalico.docs.tigera.io/getting-started/kubernetes/quickstart Calico没安装好,会带来很多网络问题

8、测试联通情况 kubectl get svc -n kube-system dig -t a www.baidu.com @10.96.0.10 (这个IP是上一条命令查询出来的)

第八步:安装Node节点

1、在master机上执行下列命令 执行这个命令的目的是生成Node节点要执行的命令 kubeadm token create --ttl 0 --print-join-command

2、执行1步生成的命令 (在各个节点机上执行,注意要加上–cri-socket unix:///var/run/cri-dockerd.sock,1.24及后续版本,需要加这句) kubeadm join 10.0.12.8:6443 --token axm8tx.vixq07jevv9axnwy --discovery-token-ca-cert-hash sha256:5b242dc60784737e180f37b125e946890089f687d0fb4795e0fcb8a70efb4eea --cri-socket unix:///var/run/cri-dockerd.sock

3、查询节点情况 kubectl get nodes -o wide

第九步:安装情况检查

1、查询节点情况 kubectl get nodes -o wide

2、查询组件情况 kubectl get cs

3、查询Pod情况 kubectl get pods --all-namespaces -o wide kubectl get pods -A -o wide kubectl get pods -n kube-system kubectl get pods,svc,deploy -A -o wide

4、测试网络联通情况 kubectl get svc -n kube-system dig -t a www.baidu.com @10.96.0.10

5、其它测试 查询命名空间

6、常用操作命令 查询版本 kubelet --version kubectl version kubeadm version

查看节点 kubectl get nodes -o wide kubectl get all -n ingress-nginx 查看命名空间下的所有对象

删除pod kubectl delete pods -n kubectl delete svc -n kubectl delete deploy -n kubectl delete -f deploy.yaml(安装时的yaml)

编辑pod kubectl edit pods -n kubectl edit svc -n kubectl edit deploy -n

查看状态,错误等信息 kubectl describe node -n

查看Ingress kubectl get ingress -n

安装telnet yum -y install telnet

第十步:问题案例分析

1、k8s master机组件状态发现scheduler unhealthy的处理

vi /etc/kubernetes/manifests/kube-scheduler.yaml配置文件,将–port=0改为 --port=10251

2、节点机查询pod报错 [root@k8s-node1 ~]# kubectl get pod The connection to the server localhost:8080 was refused - did you specify the right host or port?

解决方式: cd /etc/kubernetes/ 查看到有个文件:kubelet.conf(你们的有可能是admin.conf)

执行命令 echo “export KUBECONFIG=/etc/kubernetes/kubelet.conf” >> /etc/profile source /etc/profile

再次查看kubectl get pod已经正常。 原因: kubernetes master没有与本机绑定,集群初始化的时候没有绑定,此时设置在本机的环境变量即可解决问题。

第十一步:应用安装 1、kubernetes-dashboard V2.6.0安装 详见https://blog.csdn.net/u011654843/article/details/125327941

查看登录的Token kubectl describe secrets dashboard-admin -n kube-system

2、如何快速编写yaml文件 第一种 使用kubectl create命令生产yaml文件 kubectl create deployment web --image=nginx -o yaml --dry-run > m1.yaml (测试生成yaml文件,然后修改成自己想要的。)

第二种 使用kubectl get 命令导出yaml文件 kubectl get deploy nginx -o=yaml >m2.yaml (导出已有的,然后修改成自己想要的)

3、常用软件安装 Tomcat,Nginx安装yaml脚本在附件中,直接执行如下命令安装 kubectl apply -f xxxx.yaml kubectl delete -f xxxx.yaml Yaml脚本可参照:https://www.kubebiz.com

简易安装可参照网页:https://blog.51cto.com/u_330478/4745839,基本命令有: kubectl create deployment first-tomcat --image=tomcat:8.5.59 --namespace=studyns kubectl expose deployment first-tomcat --namespace=studyns --port=8080 --type=NodePort kubectl scale --replicas=2 deployment first-tomcat -n studyns(扩缩容)

Ingress安装要注意的问题 执行配置时,报如下图的错误:

解决方法: kubectl get validatingwebhookconfigurations kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission 参照网页:https://blog.csdn.net/qq_39218530/article/details/115372879

安装Ingress,可参照:(此文讲得比较清楚) https://blog.csdn.net/yy8623977/article/details/124899742

注意大坑: 使用Ingress的应用,如tomcat、nginx等,与Ingress config要在一个namespace中,否则是无法访问的。注意使用kubectl describe命令查看:

进入POD: kubectl -n studyns exec -it nginx-deployment-544dc8b7c4-z68jd – /bin/bash 进入POD后,查看文件内容用cat /etc/nginx/nginx.conf

联系作者:微信号 maxchina_zhang

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。