k8s1.3、containerd2.0部署实战
参考博客
containerd二进制安装与使用测试
containerd可以和docker共存,直接二进制安装,nerdctl-full包含containerd和nerdctl命令行工具可以代替docker单机使用
下载nerdctl-full
下载后解压到/usr/local目录下
tar xvf nerdctl-full-2.0.0-linux-amd64.tar.gz -C /usr/local/
修改镜像源
# 如果不用自己替换成好用的地址
mkdir -p /etc/containerd/certs.d/_default/
cat<< EOF > /etc/containerd/certs.d/_default/hosts.toml
[host."https://docker.unsee.tech"]
capabilities = ["pull", "resolve"]
skip_verify = true
EOF
创建配置文件
touch /etc/containerd/config.toml
tee /etc/containerd/config.toml <<EOF
version = 3
[plugins]
[plugins.'io.containerd.cri.v1.images']
[plugins.'io.containerd.cri.v1.images'.pinned_images]
sandbox = 'registry.aliyuncs.com/google_containers/pause:3.10'
[plugins.'io.containerd.cri.v1.images'.registry]
config_path = '/etc/containerd/certs.d'
[plugins.'io.containerd.cri.v1.runtime']
[plugins.'io.containerd.cri.v1.runtime'.cni]
bin_dir = '/usr/local/libexec/cni'
conf_dir = '/etc/cni/net.d'
EOF
启动containerd服务
systemctl enable containerd.service --now
测试拉取镜像
nerdctl pull busybox
nerdctl run -it busybox:latest
k8s安装
一共就安装4个包,有用的就3个,go语言开发的包包含的文件都比较少,这里采用阿里Debian源其他系统参考
apt update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/deb/Release.key |
gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/deb/ /" |
tee /etc/apt/sources.list.d/kubernetes.list
apt update
aptinstall -y kubelet kubeadm kubectl
命令行补全
cat >> ~/.bashrc <<EOF
source <(kubectl completion bash)
source <(nerdctl completion bash)
source <(crictl completion bash)
source <(ctr completion bash)
source <(kubeadm completion bash)
EOF
修改hosts文件
cat >> /etc/hosts << EOF
192.168.222.100 master
192.168.222.101 node1
192.168.222.102 node2
EOF
开启端口转发
cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
#加载br_netfilter模块,会自动将br.iptale两个参数设置为1
#net.bridge.bridge-nf-call-ip6tables = 1
#net.bridge.bridge-nf-ca11-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
#开启转发
net.ipv4.ip_forward=1
EOF
sysctl --system
#加载内核模块
modprobe br_netfilter
cat > /etc/modules-load.d/k8s.conf << EOF
br_netfilter
EOF
拉取镜像加速
#括号内的版本可以用下面的命令查询
# kubeadm config image list
images=(
kube-apiserver:v1.31.3
kube-controller-manager:v1.31.3
kube-scheduler:v1.31.3
kube-proxy:v1.31.3
pause:3.10
coredns/coredns:v1.11.3
etcd:3.5.15-0
)
for imageName in ${images[@]};do
nerdctl pull registry.aliyuncs.com/google_containers/$imageName
nerdctl tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
nerdctl rmi registry.aliyuncs.com/google_containers/$imageName
done
master节点执行集群初始化命令
kubeadm init \
--apiserver-advertise-address=192.168.222.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.31.3 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#配置kubectl环境变量
cat <<EOF >> /root/.bashrc
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
source /root/.bashrc
管理面板kuboard
nerdctl run -d \
--restart=unless-stopped \
--name=kuboard \
-p 80:80/tcp \
-p 10081:10081/tcp \
-e KUBOARD_ENDPOINT="http://192.168.23.120:80" \
-e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
-v /root/kuboard-data:/data \
eipwork/kuboard:v3