前置声明:虽然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成功跑起来。
结语
其实之前一直使用的CentOS 7,k8s的容器引擎也是默认的Docker。为什么会切换到Debian与CRI-O。
首先是,CentOS 7的内核比较旧,其实这点我还是能接受,但是问题出在最近更新的一个独立服务器上面,它家的系统的CentOS7,内核是定制过的,不支持overlayfs。而且如果自己更换内核,无法正常启动…
这是被迫要改系统,然后就切换到Debian 10了。
而换CRI-O,这个感觉是趋势,早点换看看踩踩坑,Dockershim毕竟是要废弃的,而且软件的依赖也没处理好,经常不小心升级后会出现各种奇怪的问题。
这些更换目前都不是性能/安全等原因上的考虑,只是被迫换系统的场景下,干脆直接换到CRI-O,提前做做准备。后续使用过程有什么坑,也会一一记录。