Centos8.2环境kubeadm部署k8s 1.22.1
k8s1.22.1超详细版部署方案docker+cri_dockerd+k8s1.22.1
1.说明
由于k8s1.24后不在支持docker引擎作为容器运行时(CRI)了,目前部署官网指定了三种cri的方案
本次部署CRI选择为docker+cri-dockerd的方案
2.环境准备
操作系统:centos8.2.2004,下载链接:https://mirrors.aliyun.com/centos-vault/8.2.2004/isos/x86_64/
虚拟机规格 :2核4g 192.168.182.135(master) 192.168.182.136(node1)192.168.182.137(node2)
主机yum源:
系统源配置为阿里云的源http://mirrors.aliyun.com/centos/
docker和k8s后面会有获取方法
3.部署的前置条件
3.1主机互信配置
每台主机执行ssh-keygen
,一路回车,生成公钥,ssh-copy-id
将公钥分发给另外两台主机即可
3.2主机名配置
#master节点
hostnamectl set-hostname k8s-master01
#node1节点
hostnamectl set-hostname k8s-worker01
#node2节点
hostnamectl set-hostname k8s-worker02
3.3主机配置静态ip
以第一台192.168.182.135为例,三台均需要配置
#vi /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens160"
UUID="bf37430a-ad2c-4848-983c-1b9ea1b4522e"
DEVICE="ens160"
ONBOOT="yes"
IPADDR=192.168.182.135
NETMASK=255.255.255.0
GATEWAY=192.168.182.2
DNS1=192.168.182.2
另外两台同样配置
3.4主机名与ip映射配置
三台虚拟机均需要配置
如下:
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.182.135 k8s-master
192.168.182.136 k8s-node1
192.168.182.137 k8s-node2
3.5防火墙&selinux配置
所有机器均需要操作
关闭防火墙:
# systemctl disable firewalld
# systemctl stop firewalld
# firewall-cmd --state
关闭selinux
1.直接setenforce0
2.需重启sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
3.6时间同步
由于是克隆的虚拟机,所以这里时间是自然同步的,但是如果生产环境部署此步骤一定不能省略
# crontab -l
0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com
3.7操作系统内核检查
检查操作系统内核,3.10的内核可能会出问题
我这里是4.18
uname -r
3.8配置内核转发以及网桥过滤
所有机器均需要进行此操作
配置如下
添加网桥过滤和内核配置转发文件
# 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
vm.swappiness = 0
EOF
加载br_netfilter模块
modprobe br_netfilter
查看是否加载
#lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 151336 1 br_netfilter
加载网桥过滤及内核转发配置文件
#sysctl -p /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
3.9安装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
3.10关闭swap分区
临时关闭:swapoff -a
永久关闭:
永远关闭swap分区,需要重启操作系统
# cat /etc/fstab
......
此行注释#/dev/mapper/centos-swap swap swap defaults 0 0
4.docker准备
4.1获取docker的yum源
# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O
/etc/yum.repos.d/docker-ce.repo
4.2安装docker
# yum -y install docker-ce
4.3修改cgroup方式
创建/etc/docker/daemon.json
在/etc/docker/daemon.json添加如下内容
# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
4.4启动docker服务
systemctl start docker
5.cri-dockerd安装
5.1golang环境准备
获取golang安装包
# wget https://golang.google.cn/dl/go1.16.15.linux-amd64.tar.gz
tips:如果网络延迟太大,就手动上去下载下来再解压
解压golang至指定目录
# tar -xzf go1.16.15.linux-amd64.tar.gz -C /usr/local
添加环境变量
# cat /etc/profile
......
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
加载/etc/profile文件
# source /etc/profile
验证golang是否安装完成
# go version
输出
go version go1.16.15 linux/amd64
5.2安装cri-dockerd
5.2.1获取cri-dockerd包
由于虚拟机无法直接git clone源码(到github的网络问题),所以需要手动获取
我用的0.2.1版本了,链接:https://github.com/Mirantis/cri-dockerd/releases/tag/v0.2.1
下载cri-dockerd-0.2.1.amd64.tgz包
直接解压,解压后得到cri-dockerd文件
cp cri-dockerd /usr/bin/
5.2.2systemctl相关配置文件准备
创建cri-docker.service文件,注意pause版本要适配k8s版本,容器镜像改成阿里云
[root@k8s-master cri-dockerd]# vim /usr/lib/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.5
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
5.2.3socket文件配置
如下:
[root@k8s-master cri-dockerd]# vim /usr/lib/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=root
[Install]
WantedBy=sockets.target
5.2.4设置和启动cri-dockerd
systemctl daemon-reload
systemctl start cri-docker
systemctl enable cri-docker
检查服务状态
systemctl status cri-docker
将/usr/bin/cri-dockerd传到另外两个节点/usr/bin/路径下,并执行上述同样的部署过程
6.部署k8s1.22.1
6.1配置k8s yum源
[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
6.2yum安装集群软件
所有节点均可安装
安装
# yum -y install kubeadm-1.22.1 kubelet-1.22.1 kubectl-1.22.1
#这里我是指定版本安装的,不指定的话就是最新的1.24版本
6.3配置kubelet
需要保持docker使用的cgroupdriver与kubelet使用的cgroup一致
# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
设置kubelet为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动
# systemctl enable kubelet
6.4集群镜像准备
先查看当前安装k8s版本需要什么版本的镜像
#kubeadm config images list --kubernetes-version=1.22.1
k8s.gcr.io/kube-apiserver:v1.22.1
k8s.gcr.io/kube-controller-manager:v1.22.1
k8s.gcr.io/kube-scheduler:v1.22.1
k8s.gcr.io/kube-proxy:v1.22.1
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4
编写下载镜像脚本
version=1.22.1
images=$(kubeadm config images list --kubernetes-version=${version}|awk -F '/' '{print $NF}')
for imageName in ${images[@]};
do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName} k8s.gcr.io/${imageName}
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
done
也可以手动docker pull
下载镜像:
所需镜像对应版本如下
k8s.gcr.io/kube-apiserver:v1.22.1
k8s.gcr.io/kube-controller-manager:v1.22.1
k8s.gcr.io/kube-scheduler:v1.22.1
k8s.gcr.io/kube-proxy:v1.22.1
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4
6.5初始化
kubeadm init --kubernetes-version=v1.22.1 --pod-networkcidr=10.244.0.0/16 --apiserver-advertise-address=192.168.182.135 --cri-socket unix:///var/run/cri-dockerd.sock
注意需指定cri-socket
7.集群网络calico安装
k8s集群部署完成后,kubectl get nodes
发现三个节点都是notready状态,这个原因是因为还没有部署集群网络,本次安装calico作为集群网络使用
7.1下载operator资源清单文件
# wget https://docs.projectcalico.org/manifests/tigera-operator.yaml
应用资源清单文件,创建operator
# kubectl apply -f tigera-operator.yaml
通过自定义资源方式安装
# wget https://docs.projectcalico.org/manifests/custom-resources.yaml
修改文件第13行,修改为使用kubeadm init ----pod-network-cidr对应的IP地址段10.244.0.0
# vim custom-resources.yaml
......
13 cidr: 10.244.0.0/16
14 encapsulation: VXLANCrossSubnet
应用资源清单文件
# kubectl apply -f custom-resources.yaml
监视calico-sysem命名空间中pod运行情况
# watch kubectl get pods -n calico-system
删除 master 上的 taint
# kubectl taint nodes --all node-role.kubernetes.io/master-
# kubectl get pods -n calico-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-59f859b79d-7gx7k 1/1 Running 0 20h
calico-node-m2nf2 1/1 Running 0 20h
calico-node-mgr8s 1/1 Running 0 20h
calico-node-xvvtm 1/1 Running 0 20h
calico-typha-76665cf59d-ltznd 1/1 Running 0 20h
calico-typha-76665cf59d-rfwwn 1/1 Running 0 20h
# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-7f6cbbb7b8-lwskf 1/1 Running 0 40h
coredns-7f6cbbb7b8-rhhqj 1/1 Running 0 40h
etcd-k8s-master 1/1 Running 0 40h
kube-apiserver-k8s-master 1/1 Running 0 40h
kube-controller-manager-k8s-master 1/1 Running 0 40h
kube-proxy-4vmwn 1/1 Running 0 39h
kube-proxy-r877v 1/1 Running 0 40h
kube-proxy-znhkv 1/1 Running 0 39h
kube-scheduler-k8s-master 1/1 Running 0 40h
7.2安装calico客户端
下载二进制文件
# curl -L
https://github.com/projectcalico/calico/releases/download/v3.21.4/calicoctllinux-
amd64 -o calicoctl
如果到github网络有问题,就手动上去下载包
安装calicoctl
# mv calicoctl /usr/bin/
为calicoctl添加可执行权限
# chmod +x /usr/bin/calicoctl
查看添加权限后文件
# ls /usr/bin/calicoctl
/usr/bin/calicoctl
查看calicoctl版本
# calicoctl version
Client Version: v3.21.4
Git commit: 220d04c94
Cluster Version: v3.21.4
Cluster Type: typha,kdd,k8s,operator,bgp,kubeadm
通过~/.kube/config连接kubernetes集群,查看已运行节点
# DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl get nodes
安装完成后,再执行kubectl get nodes
,发现均为ready状态,集群安装完成!
更多推荐
所有评论(0)