k8s1.23版本集群搭建
相关资料:链接:https://pan.baidu.com/s/181STE4g-BmZaybb47iVQAg
提取码:aabb
#优化安装环境
1.设置 master,node1,node2 hosts文件
vim /etc/hosts
192.168.31.14 cymaster1
192.168.31.15 cynode1
192.168.31.16 cynode2
2.设置master,node1,node2 相互免密登录
ssh-keygen
ssh-copy-id cymaster
ssh-copy-id cynode1
ssh-copy-id cynode2
3.建议关闭交换分区(虚拟内存分区)
swapoff -a
vim /etc/fstab
4.修改机器内核参数
[root@xianchaomaster1 ~]# modprobe br_netfilter
[root@xianchaomaster1 ~]# echo "modprobe br_netfilter" >> /etc/profile
[root@xianchaomaster1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
[root@xianchaomaster1 ~]# sysctl -p /etc/sysctl.d/docker.conf
5.配置国内源
#配置国内阿里云docker的repo源
[root@xianchaomaster1 ~]# yum install -y yum-utils
[root@xianchaomaster1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@xianchaonode1~]# yum install -y yum-utils
[root@xianchaonode1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@xianchaonode2 ~]# yum install -y yum-utils
[root@xianchaonode2 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.配置k8s国内源,master,node1,node2
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
scp /etc/yum.repos.d/kubernetes.repo cynode1:/etc/yum.repos.d/
scp /etc/yum.repos.d/kubernetes.repo cynode2:/etc/yum.repos.d/
vim /etc/hosts
7.配置docker镜像加速器和驱动
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://8byifwad.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
,"insecure-registries":["192.168.31.13"]
,"exec-opts": ["native.cgroupdriver=systemd"]
}
#修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以。
#yum install -y docker-ce
scp /etc/docker/daemon.json cynode1:/etc/docker/
scp /etc/docker/daemon.json cynode2:/etc/docker/
systemctl daemon-reload && systemctl restart docker
systemctl enable docker
8.在master,node1,node2安装初始化k8s需要的软件包
yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1
systemctl enable kubelet
#每个软件包的作用
#Kubeadm: kubeadm是一个工具,用来初始化k8s集群的
#kubelet: 安装在集群所有节点上,用于启动Pod的
#kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
9.kubeadm初始化k8s集群
#把初始化k8s集群需要的离线镜像包上传到master,node1、node2机器上,手动解压:
scp /root/k8s-images-v1.23.1.tar.gz cynode1:/root/
scp /root/k8s-images-v1.23.1.tar.gz cynode2:/root/
docker load -i /root/k8s-images-v1.23.1.tar.gz
10.使用kubeadm初始化k8s集群控制节点master
kubeadm config print init-defaults > kubeadm.yaml
#根据我们自己的需求修改配置,比如修改 imageRepository 的值,kube-proxy 的模式为 ipvs,初始化节点的时候需要指定cgroupDriver为systemd
advertiseAddress: 192.168.31.14 #控制节点的ip
name: cymaster #控制节点主机名
imageRepository: registry.aliyuncs.com/google_containers #镜像国内源
kubernetesVersion: v1.20.6
podSubnet: 10.244.0.0/16 #指定pod网段, 需要新增加这个
#追加如下几行
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
#ipvs 表示kube-proxy代理模式是ipvs,如果不指定ipvs,会默认使用iptables,但是iptables效率低,所以我们生产环境建议开启ipvs
#阿里云和华为云托管的K8s,也提供ipvs模式
#基于kubeadm.yaml文件初始化k8s
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification
#配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理
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
11.在集群中添加第一个工作节点
kubeadm token create --print-join-command
#kubeadm join 192.168.31.14:6443 --token 8pwo64.38zxbatkvaaqld8k --discovery-token-ca-cert-hash sha256:18e1b65b0205c08f183a4eeef53cb070df9d1cbae074a17aed45d576654162ef
#分别在node1,node2执行
kubeadm join 192.168.31.14:6443 --token 8pwo64.38zxbatkvaaqld8k --discovery-token-ca-cert-hash sha256:18e1b65b0205c08f183a4eeef53cb070df9d1cbae074a17aed45d576654162ef --ignore-preflight-errors=SystemVerification
12.master主机上给工作节点roles赋名字
kubectl label node cynode1 node-role.kubernetes.io/worker=worker
kubectl label node cynode2 node-role.kubernetes.io/worker=worker
13.装kubernetes网络组件-Calico
#上传calico.yaml到master上,使用yaml文件安装calico 网络插件 。
kubectl apply -f calico.yaml
注:在线下载配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml
kubectl get pod -n kube-system
#calico网络插件配置文件说明
#CALICO_IPV4POOL_IPIP:是否启用IPIP模式。启用IPIP模式时,Calico将在Node上创建一个名为tunl0的虚拟隧道。
- name: CALICO_IPV4POOL_IPIP
#IP Pool可以使用两种模式:BGP或IPIP使用IPIP模式时,设置CALICO_IPV4POOL_IPIP="Always",不使用IPIP模式时,设置CALICO_IPV4POOL_IPIP="Off",此时将使用BGP模式。
#IP_AUTODETECTION_METHOD:获取Node IP地址的方式,默认使用第1个网络接口的IP地址,对于安装了多块网卡的Node,可以使用正则表达式选择正确的网卡,例如"interface=eth.*"表示选择名称以eth开头的网卡的IP地址。
- name: IP_AUTODETECTION_METHOD
value: "interface=ens33"
14.测试在k8s创建pod是否可以正常访问网络
#把busybox-1-28.tar.gz上传到cymaster、cynode1,cynode2节点,手动解压
docker load -i busybox-1-28.tar.gz
#master
#测试网络是否正常
kubectl run busybox --image busybox:1.28 --image-pull-policy=IfNotPresent --restart=Never --rm -it busybox -- sh
#测试coredns
kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
nslookup kubernetes.default.svc.cluster.local
#10.96.0.10 就是我们coreDNS的clusterIP,说明coreDNS配置好了。
#解析内部Service的名称,是通过coreDNS去解析的。
15.kubeadm初始化k8s证书过期解决方案
查看证书有效时间:
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not
延长证书过期时间
1.把update-kubeadm-cert.sh文件上传到cymaster节点
2.在cymaster上执行如下:
1)给update-kubeadm-cert.sh证书授权可执行权限
[root@cymaster~]#chmod +x update-kubeadm-cert.sh
2)执行下面命令,修改证书过期时间,把时间延长到10年
[root@cymaster~]# ./update-kubeadm-cert.sh all
3)在cymaster节点查询Pod是否正常,能查询出数据说明证书签发完成
kubectl get pods -n kube-system
4)再次查看证书有效期,可以看到会延长到10年
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not
评论区