0%

Debian 10 配置 Kubernetes CRI-O

前置声明:虽然Debian默认禁用root登录,但是作为运维人员,还是有必要使用root的,下面所有指令,也是基于root账号操作的,因此并没有sudo。

安装CRI-O

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 设置环境变量,系统,目标版本,我这里是Debian 10,使用当前最新的1.20的CRI-O
OS=Debian_10
VERSION=1.20
# 添加源,这里官网的例子中,如果使用的是小版本号,源的url路径有点问题,需要注意。例如 1.18的1.18.4 版本,设置 VERSION=1.18:1.18.4, 但是对应的 URL 应该是 .../1.18:/1.18.4/Debian_10,如果使用的是别的版本,注意修改这里
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list

# 导入key
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | apt-key add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | apt-key add -

# 更新
apt-get update

# Debian 10 稳定源里面,libseccomp2 的版本比较旧, 是2.3的,这里需要自己手动升级一下,因此这里是否会引入不稳定的情况,很难预估。毕竟官网里面写的版本,还是使用的Debian_Testing,稳定版还没有。
# 下载最新的 libseccomp2 进行安装
wget http://ftp.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.5.1-1_amd64.deb
dpkg -i libseccomp2_2.5.1-1_amd64.deb

# 安装 cri-o
apt-get install cri-o cri-o-runc

# 启动cri-o
service crio start

安装k8s

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# disable swap
swapoff -a
# 编辑 /etc/fstab 去掉 swap 的配置

# 配置启动加载模块
modprope br_netfilter
# 在 /etc/modules 追加 br_netfilter,以便重启后自动加载 br_netfilter

# 配置
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
EOF
sysctl --system

# install k8s,k8s的版本需要与crio的版本对应,crio是1.20的,k8s的也是1.20
apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

vim /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main

apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

配置k8s

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 使用kubeadm初始化
PUBLICIP=xxx.xxx.xxx.xxx
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/16 --apiserver-advertise-address=$PUBLICIP --cri-socket=/var/run/crio/crio.sock

# 配置
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# 安装网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 确认下是否配置成功
kubectl get nodes -n kube-system
kubectl get pods -n kube-system

# 配置 dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml

后面就不用再说了,k8s成功跑起来。

image-20201227171247731

结语

其实之前一直使用的CentOS 7,k8s的容器引擎也是默认的Docker。为什么会切换到Debian与CRI-O。

首先是,CentOS 7的内核比较旧,其实这点我还是能接受,但是问题出在最近更新的一个独立服务器上面,它家的系统的CentOS7,内核是定制过的,不支持overlayfs。而且如果自己更换内核,无法正常启动…

这是被迫要改系统,然后就切换到Debian 10了。

而换CRI-O,这个感觉是趋势,早点换看看踩踩坑,Dockershim毕竟是要废弃的,而且软件的依赖也没处理好,经常不小心升级后会出现各种奇怪的问题。

这些更换目前都不是性能/安全等原因上的考虑,只是被迫换系统的场景下,干脆直接换到CRI-O,提前做做准备。后续使用过程有什么坑,也会一一记录。