这篇文章记录了k8s的环境搭建步骤,除了node节点上不用安装网络插件以外。master和node节点的环境塔建几乎都是一样的。

准备工作

关闭swap

# swapoff -a

同时还需要在/etc/fstab里注释掉swap那一行

关闭防火墙

# systemctl stop firewalld
# systemctl disable firewalld

如果你不想关闭防火墙,可以打开kubernetes的官方文档所写的端口。

允许 iptables 检查桥接流量

# cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# modprobe br_netfilter
# cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
# sysctl --system

安装kubelet/kubeadm/kubectl

请按照官方文档来,这里就不搬运了。

https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

安装完之后看看kubeadm是什么版本

# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"clean", BuildDate:"2021-09-15T21:37:34Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}

比如我这里安装的是1.22版本的,后面安装CRI-O的时候也要装1.22版本的。

最后把kubelet设为开机运行

# systemctl enable kubelet

记得安装之后一定要按照官方文档的步骤把版本号锁死。

安装CRI-O

看了一些对比containerd和cri-o比较的文章之后我决定使用cri-o来作为CRI运行时。

安装CRI-O的步骤可以参考Kubernetes的官方文档

https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/

或者是CRI-O的github文档

https://github.com/cri-o/cri-o/blob/main/install.md

因为kubernets的迭代实在太快,比起笔记还是参照官方文档获得最新信息吧。

下面是对官方文档的一些补充。

首先是官方给出的步骤可能会踩坑。就是在添加apt源的时候,官方给出的方法是先声明一个OS和VERSION变量,但是实际的服务器目录可能会有不同。

这里以Debian10和CRI-O1.22为例子,官方给出的配置命令是:

# cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /
EOF
# cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /
EOF

我们就分别去到下面的地址看看究竟都有什么版本可以用:

https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/

http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/

可以知道安装Debian10和CRI-O1.22可以使用这个源:

# cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/ /
EOF
# cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:1.22.list
deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/1.22/Debian_10/ /
EOF

添加gpg key同理:

# curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:1.22/Debian_10/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -
# curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -

其次,在安装libseccomp的时候,可能需要手动指定backports源:

# apt install -y libseccomp2/buster-backports

最后,在进入到下一步初始化k8s集群之前,记得看看cri-o跑起来了没有:

# systemctl status crio

初始化k8s集群

# kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/16 --apiserver-advertise-address=服务器地址
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

pod-network-cidr设置成这样是因为后面使用了flannel网络插件,它在yaml配置里使用的就是上述的网络地址范围。

安装网络插件

# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

不安装网络插件master和nodes之间没有办法通信。

Node加入集群

在初始化完Master之后你会得到这么一行提示:

kubeadm join x.x.x.x:6443 --token xxx \
        --discovery-token-ca-cert-hash sha256:xxxxx

只需要在Node节点上输入这条命令即可加入集群。

在Node节点上使用kubectl

在node节点上如果要使用kubectl需要将master节点上的$HOME/.kube复制到node节点下。

最后修改:2021 年 09 月 25 日 03 : 41 PM
如果觉得我的文章对你有用,请随意赞赏