安装kubernetes-v1.26.9集群,安装配置calico网络
1、配置基础环境
1、资源规划 一共三台主机,安装配置一个 master01,两个worker01 master01:192.168.2.10 worker01:192.168.2.11 worker02:192.168.2.12
镜像仓库服务器:192.168.2.20
VMware虚拟机规格:CentOS Linux 7 (Core) 2核CPU、3G内存、50G磁盘 注:创建虚拟机详见我的课程《基于HA方案kubernetes集群生产实战案例》
2、主机名配置。 hostnamectl set-hostname master01 su hostnamectl set-hostname worker01 su hostnamectl set-hostname worker02 su
3、主机IP地址配置 #master01主机 vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no #IPV6_AUTOCONF=yes #IPV6_DEFROUTE=yes #IPV6_FAILURE_FATAL=no #IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=7c717ca7-d868-487d-8548-5b5507da0dba DEVICE=ens33 ONBOOT=yes IPADDR=192.168.2.10 NETMASK=255.255.255.0 GATEWAY=192.168.2.1 DNS1=192.168.2.1 DNS2=114.114.114.114
#worker01 vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no #IPV6_AUTOCONF=yes #IPV6_DEFROUTE=yes #IPV6_FAILURE_FATAL=no #IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=1ca9f1c0-4ad8-480d-9128-343c39eb9818 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.2.11 NETMASK=255.255.255.0 GATEWAY=192.168.2.1 DNS1=192.168.2.1 DNS2=114.114.114.114
#worker02 vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no #IPV6_AUTOCONF=yes #IPV6_DEFROUTE=yes #IPV6_FAILURE_FATAL=no #IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=7c11a778-e4dd-49d7-8593-89c7b6a1c23a DEVICE=ens33 ONBOOT=yes IPADDR=192.168.2.12 NETMASK=255.255.255.0 GATEWAY=192.168.2.1 DNS1=192.168.2.1 DNS2=114.114.114.114
4、配置主机名与IP地址解析。所有主机均需要配置。
cat <<EOF >> /etc/hosts
192.168.2.10 k8s.yunlearn.org
192.168.2.10 master01
192.168.2.11 worker01
192.168.2.12 worker02
192.168.2.20 registry.yunlearn.org
EOF
5、关闭防火墙firewalld systemctl disable firewalld systemctl stop firewalld firewall-cmd --state not running
6、SELINUX配置 #关闭每台主机SELINUX 临时方法 setenforce 0 #关闭每台主机SELINUX 永久关闭的方法 #/etc/selinux/config配置文件参数必须改为disabled,如:SELINUX=disabled sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
7、NTP时间同步 #所有主机均需要操作。最小化安装系统需要安装ntpdate软件。 #手动同步系统时间,比如: date -s "2023-10-15 10:15:28" #确认时间 date #安装手动同步系统时钟软件 yum install -y ntpdate #使用阿里时间服务 ntpdate ntp.aliyun.com #ntpdate ntp1.aliyun.com #系统时钟同步到硬件时钟 hwclock -w #查看硬件时钟 hwclock -r hwclock --show #查看时钟及同步状态,如果同步状态未开启,请执行开启命令:timedatectl set-ntp yes timedatectl status | grep NTP
或通过定时任务同步时间
#crontab -l 0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com
8、升级系统内核 #所有主机均需要操作 #导入elrepo gpg key rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org #安装elrepo YUM源仓库 yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm #安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本 yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64 #设置grub2默认引导为0 grub2-set-default 0 #重新生成grub2引导文件 grub2-mkconfig -o /boot/grub2/grub.cfg #更新后,需要重启,使用升级的内核生效。 reboot #重启后,需要验证内核是否为更新对应的版本 uname -r
9、配置内核转发及网桥过滤 #所有主机均需要操作 #添加网桥过滤及内核转发配置文件 cat /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 #加载生效 sysctl -p /etc/sysctl.d/k8s.conf #确认系统参数 sysctl --system
#加载br_netfilter模块 modprobe br_netfilter #查看是否加载 lsmod | grep br_netfilter br_netfilter 22256 0 bridge 151336 1 br_netfilter
10、安装ipset及ipvsadm #所有主机均需要操作 #安装ipset及ipvsadm yum -y install ipset ipvsadm
#配置ipvsadm模块加载方式 #添加需要加载的模块 cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack EOF
#授权、运行、检查是否加载 chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
11、关闭Swap分区 #Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。 关闭Swap方法如下: vi /etc/fstab # 永久关闭 swap 行首加#号注释 free # 可以通过这个命令查看swap是否关闭 #重载生效 systemctl daemon-reload
2、安装Docker
1、Docker yum源准备 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo #检查已安装版本 rpm -qa | grep docker-ce #卸载 rpm -e 软件包名 --nodeps
2、docker安装 #安装依赖组件 yum install -y yum-utils device-mapper-persistent-data lvm2 #安装docker yum install -y docker-ce-20.10.23 docker-ce-cli-20.10.23 docker-ce-rootless-extras-20.10.23
3、启动docker systemctl enable --now docker #验证版本 docker version
4、修改cgroup方式 #在/etc/docker/daemon.json添加如下内容 cat /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"] } #/etc/docker/daemon.json文件内容如下: { "insecure-registries": ["registry.local", "registry.yunlearn.org:5000"], "registry-mirrors": ["https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"], "bip": "172.18.0.1/24", "log-driver": "json-file", "storage-driver": "overlay2", "live-restore": true, "log-opts": { "max-size": "500m", "max-file": "3" }, "exec-opts": ["native.cgroupdriver=systemd"] }
5、重启docker systemctl restart docker
3、安装go和cri-dockerd
3.1 安装Go
#根据需要,可以在一台主机操作再将编译打包好的程序拷到其他主机,也可以所有主机均操作。因为需要编译打包cri-dockerd源码,所以需安装配置go环境。 #go版本根据cri-dockerd仓库(https://github.com/Mirantis/cri-dockerd.git)要求选择 1、下载安装包,配置GOPATH、GOROOT、GOPROXY,以及GO111MODULE 设置为on #gov1.18.10 wget https://golang.google.cn/dl/go1.18.10.linux-amd64.tar.gz 2、解压 tar xvf go1.18.10.linux-amd64.tar.gz -C /usr/local/ 3、配置环境变量 vi /etc/profile export PATH=$PATH:/usr/local/git/bin export GOROOT=/usr/local/go export PATH=$PATH:/usr/local/go/bin export GOPATH=/gopath export PATH=$PATH:$GOPATH/bin 4、加载生效 source /etc/profile 5、修改go资源代理路径 go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct go env -w CGO_ENABLED="0" 6、验证版本 go version
3.2 安装cri-dockerd
1、登录master01主机,克隆cri-dockerd源码 git clone https://github.com/Mirantis/cri-dockerd.git 2、查看目录中内容 ls cri-dockerd backend code-of-conduct.md containermanager docs go.sum LICENSE Makefile network README.md store utils VERSION cmd config core go.mod libdocker main.go metrics packaging scripts streaming vendor
3、创建bin目录并构建cri-dockerd二进制文件 cd cri-dockerd mkdir bin go get && go build -o bin/cri-dockerd
4、创建/usr/local/bin,默认存在时,可不用创建 mkdir -p /usr/local/bin
5、安装cri-dockerd install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
6、复制服务管理文件至/etc/systemd/system目录中 cp -a packaging/systemd/* /etc/systemd/system/
7、指定cri-dockerd运行位置 sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
8、启动服务 systemctl daemon-reload systemctl enable cri-docker.service systemctl enable --now cri-docker.socket
9、将cri-dockerd程序拷到worker01、worker02并安装启动 #worker01 scp /etc/systemd/system/cri-docker.service [email protected]:/etc/systemd/system/ scp /etc/systemd/system/cri-docker.socket [email protected]:/etc/systemd/system/ scp /usr/local/bin/cri-dockerd [email protected]:/usr/local/bin/ #登录worker01主机启动服务 systemctl daemon-reload systemctl enable cri-docker.service systemctl enable --now cri-docker.socket
#worker02 scp /etc/systemd/system/cri-docker.service [email protected]:/etc/systemd/system/ scp /etc/systemd/system/cri-docker.socket [email protected]:/etc/systemd/system/ scp /usr/local/bin/cri-dockerd [email protected]:/usr/local/bin/ #登录worker02主机启动服务 systemctl daemon-reload systemctl enable cri-docker.service systemctl enable --now cri-docker.socket
4、部署kubernetes-v1.26.9集群
4.1 kubernetes yum源准备
#只需配置一个yum源 1、谷歌yum源 [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
2、阿里云yum源 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
4.2 集群软件安装
#所有主机均可安装 1、安装基础组件 yum install -y kubeadm-1.26.9-0 kubectl-1.26.9-0 kubelet-1.26.9-0 #检查已安装版本 rpm -qa | grep -E "kubeadm|kubectl|kubelet"
2、配置kubelet #为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,需修改如下文件内容。 vi /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
3、设置kubelet为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动 systemctl enable kubelet
4.3 部署kubernetes集群Master节点
1、上传kubeadm-config.yaml #所有主机均需要操作。 mkdir kubeadm cd /root/kubeadm # kubeadm-config.yaml存放路径:192.168.2.10:/root/kubeadm #可以通过获取默认配置再修改:kubeadm config print init-defaults > kubeadm-config.yaml vi kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta3 bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages:
- signing
- authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.2.10 bindPort: 6443 nodeRegistration: criSocket: unix:///var/run/cri-dockerd.sock imagePullPolicy: IfNotPresent name: master01 # 根据主机名配置 taints: null
apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta3 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: {} etcd: local: dataDir: /var/lib/etcd kind: ClusterConfiguration kubernetesVersion: 1.26.9 controlPlaneEndpoint: "k8s.yunlearn.org:6443" imageRepository: registry.aliyuncs.com/google_containers networking: dnsDomain: cluster.local podSubnet: "10.244.0.0/16" serviceSubnet: 10.96.0.0/12 scheduler: {}
2、在192.168.2.10主机执行以下命令安装k8s集群 cd /root/kubeadm #安装方式一:通过--config安装 kubeadm init --config=kubeadm-config.yaml --upload-certs #安装方式二:执行安装命令 kubeadm init --kubernetes-version=v1.26.9 --pod-network-cidr=10.224.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.2.10 --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock #安装方式二需带上--cir-socket参数,否则报错。如果安装失败,执行重置命令:kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock #如果方式一和方式二都报错:Error getting node" err="node "master01" not found,导致[kubelet-check] Initial timeout of 40s passed. #解决方法(所有主机均需要修改):vi /etc/systemd/system/cri-docker.service 修改前:ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint fd:// 修改后:ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd:// #重启cri-docker systemctl daemon-reload systemctl restart cri-docker.service
3、master01安装成功后,开通端口权限 iptables -I INPUT -p tcp --dport 6443 -j ACCEPT iptables -I INPUT -p tcp --dport 443 -j ACCEPT iptables -I INPUT -p tcp --dport 10250 -j ACCEPT iptables -I INPUT -p tcp --dport 53 -j ACCEPT iptables -I INPUT -p udp --dport 53 -j ACCEPT
4、集群应用客户端管理集群文件配置。 #master01安装成功后,根据输出日志内容配置客户端管理集群文件 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
4.4 部署kubernetes集群Worker节点
1、登录worker01、worker02主机均执行安装命令将节点添加到集群
cd /root/kubeadm/
kubeadm join k8s.yunlearn.org:6443 --token abcdef.0123456789abcdef
--discovery-token-ca-cert-hash sha256:f6289604fa501fef6e97ffc499334e731a6fb3005ca4c9d2720e0b42eff7adc0 --cri-socket=unix:///var/run/cri-dockerd.sock
#如果安装失败,执行重置命令:kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
#如果安装成功,但是节点POD无法启动。
#解决方法:vi /etc/systemd/system/cri-docker.service
修改前:ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint fd://
修改后:ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd://
#重启cri-docker
systemctl daemon-reload
systemctl restart cri-docker.service
2、验证节点添加成功 #切到master01主机,执行命令查看节点状态 kubectl get nodes
4.5 部署集群calico网络
#部署kubernetes集群网络 #安装参考网址:https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart
1、下载operator资源清单文件 curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml 应用资源清单,创建Operator kubectl create -f tigera-operator.yaml
2、通过自定义资源方式安装 #下载资源配置文件 curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml #修改网络参数,修改为使用kubeadm init ----pod-network-cidr对应的IP地址段 vi custom-resources.yaml ...... ipPools: - blockSize: 26 cidr: 10.224.0.0/16 encapsulation: VXLANCrossSubnet nodeAddressAutodetectionV4: interface: ens* # 根据网卡名配置,使用通配符* ...... #执行安装命令(下载镜像,启相关POD,需要一定时间)。 kubectl create -f custom-resources.yaml
3、查看状态 kubectl get pods -n calico-system
4、查看kube-system命名空间中coredns状态,处于Running状态表明联网成功 kubectl get pods -n kube-system #查看所有POD运行状态 [root@master01 kubeadm]# kubectl get po -A -o wide
4.6 验证集群可用性
1、查看所有的节点 [root@master01 kubeadm]# kubectl get nodes 2、查看集群健康情况 [root@master01 kubeadm]# kubectl get cs 3、查看kubernetes集群pod运行情况 [root@master01 kubeadm]# kubectl get pods -n kube-system 4、再次查看calico-system命名空间中pod运行情况 [root@master01 kubeadm]# kubectl get pods -n calico-system 5、查看calico-apiserver状态 [root@master01 kubeadm]# kubectl get po -n calico-apiserver 6、验证集群DNS可用 kubectl run curl --image=radial/busyboxplus:curl -it #进入容器后,执行验证命令,解析返回结果说明集群DNS正常 #kubectl exec -it curl bash # 进入POD容器 nslookup kubernetes.default # 验证集群DNS #实操提示:如果遇到验证集群DNS,报错误“nslookup: can't resolve 'kubernetes.default'”。请重建coredns Pod容器,问题得到解决。
7、启动nginx服务
#上传部署文件到master01主机
kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-svc.yaml
kubectl get po -o wide
#实操提示:执行kubectl apply -f nginx-svc.yaml命令,如果报错:The Service "nginx-demo" is invalid: spec.ports[0].nodePort: Invalid value: 8088: provided port is not in the valid range. The range of valid ports is 30000-32767
#错误信息显示,集群默认端口范围是30000-32767,有两种方法解决该问题,第一种:NodePort端口改成30082。第二种:修改kube-apiserver.yaml配置,可根据需求修改合适的端口范围
vi /etc/kubernetes/manifests/kube-apiserver.yaml
#找到service-cluster-ip-range这一行,在下一行增加参数 service-node-port-range,如下:
- --requestheader-username-headers=X-Remote-User
- --secure-port=6443
- --service-account-key-file=/etc/kubernetes/pki/sa.pub
- --service-cluster-ip-range=10.96.0.0/12
- --service-node-port-range=10-65000
8、验证业务,打开浏览器访问以下地址,页面返回nginx默认页,说明k8s集群部署成功 http://192.168.2.11:30082/
标签:kubernetes,--,192.168,etc,v1.26,dockerd,docker,cri,安装 From: https://blog.51cto.com/u_15104320/7872755