基于Containerd部署Kubernetes

基于Containerd部署Kubernetes

当Kubernetes 1.20开始准备弃用Docker,相信很多人在k8s 1.20版本出现的时候,都听说了即将弃用docker,不过还没有完全弃用,但这也是未来的趋势了。k8s的底层还是容器。

具体使用docker和弃用docker的前因后果我就不多说了,本文只是为了使用docker以外的CRI(Container Runtime Interface)来部署Kubernetes。这里就进行单机部署了。

建议使用CentOS 7.5版本以上,这里以7.6为例,配置好网络,可以访问外网

当弃用docker后,可以直接使用containerd来做CRI

准备工作


修改主机名

sed -i '$a\192.168.1.80 test' /etc/hosts
hostnamectl set-hostname test

关闭selinux&firewalld

systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config

关闭swap

swapoff -a
sed -i 's/^[^#].*swap*/#&/g' /etc/fstab

Containerd


安装依赖及常用工具

yum install -y yum-utils device-mapper-persistent-data lvm2 wget vim yum-utils net-tools epel-release

添加加载的内核模块

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

加载内核模块

modprobe overlay
modprobe br_netfilter

设置内核参数

cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

应用内核参数

sysctl --system

添加docker源

containerd也是在docker源内的

国外docker源

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

阿里云源

cat <<EOF | sudo tee /etc/yum.repos.d/docker-ce.repo
[docker]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF

安装containerd

yum -y update && yum -y install containerd.io
# 指定版本使用containerd.io-x.x.x
# 需要升级系统则yum -y update

配置containerd

默认是没有配置文件的,可以像k8s一样获取到一些默认配置

mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

修改cgroup Driver为systemd
在配置文件中如下位置添加SystemdCgroup = true

sed -i '/runc.options/a\ SystemdCgroup = true' \
/etc/containerd/config.toml && \
grep 'SystemdCgroup = true' -B 7 /etc/containerd/config.toml 

镜像加速
endpoint位置添加阿里云的镜像源

$ vim /etc/containerd/config.toml
    [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://xxxxxxxx.mirror.aliyuncs.com" ,"https://registry-1.docker.io"]

更改sandbox_image

$ vim /etc/containerd/config.toml
...
  [plugins."io.containerd.grpc.v1.cri"]
    disable_tcp_service = true
    stream_server_address = "127.0.0.1"
    stream_server_port = "0"
    stream_idle_timeout = "4h0m0s"
    enable_selinux = false
    selinux_category_range = 1024
# 将这里改为aliyun的镜像源
    sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"
    ...

启动服务

systemctl enable containerd && systemctl start containerd

如果你的环境中网络代理去访问外网,containerd也需要单独添加代理

mkdir /etc/systemd/system/containerd.service.d
cat > /etc/systemd/system/containerd.service.d/http_proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://<proxy_ip>:<proxy_port>/"
Environment="HTTPS_PROXY=http://<proxy_ip>:<proxy_port>/"
Environment="NO_PROXY=x.x.x.x,x.x.x.x"
EOF

加载配置并重启服务

systemctl daemon-reload && systemctl restart containerd

下载镜像检测containerd是否正常

ctr images pull docker.io/library/nginx:alpine

ctr是containerd自带的命令行客户端

Kubernetes


添加kubernetes源

原Kubernetes源

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 如果指定版本使用kubeadm-x.x.x
# 因为这里使用的就是准备弃用docker的版本,按最新版本安装即可

阿里云源

cat << EOF >> /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum -y install kubeadm kubectl kubelet
# 如果指定版本使用kubeadm-x.x.x
# 因为这里使用的就是准备弃用docker的版本,按最新版本安装即可

启动并设置开机自启

systemctl enable --now kubelet

命令补齐

yum -y install bash-completion
vim .bashrc
# 末尾添加
source <(kubeadm completion bash)
source <(kubectl completion bash)
source .bashrc

设置crictl


使用除docke以外的CRI时,需要使用crictl来进行镜像管理,相当于docker-cli

Containerd 只支持通过 CRI 拉取镜像的 mirror,也就是说,只有通过 crictl 或者 Kubernetes 调用时 mirror 才会生效,通过 ctr 拉取是不会生效的。crictl是k8s内部的镜像管理命令。

cat << EOF >> /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10 
debug: false
EOF

下载镜像

crictl pull nginx:latest

crictl基本上与docker用法一致

初始化集群


导出默认init文件

kubeadm config print init-defaults > kubeadm-init.yaml

修改文件

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.1.80  # 修改为本机地址
  bindPort: 6443 # apiserver端口号
nodeRegistration:
  criSocket: /var/run/containerd/containerd.sock  # 修改为containerd的sock文件位置
  name: test
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  certSANs:  # apiserver下添加certSANs字段,并填写集群中所有节点的hostname、ip以及VIP
  - test
  - 192.168.1.80
  timeoutForControlPlane: 4m0s
controlPlaneEndpoint: "192.168.1.80:6443" # 控制平面apiserver IP及端口号
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {
   }
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io  # 如果使用阿里云可以修改为registry.aliyuncs.com/google_containers 
kind: ClusterConfiguration
kubernetesVersion: v1.20.5  # kubernetes版本号 查看自己当时的版本 kubeadm version 命令查看
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: "10.16.0.0/16"  # 即将安装网络插件的ip网段 flannel网段:"10.244.0.0/16"
scheduler: {
   }
# 使用除docker外的CRI需要指定cgroupDriver
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

预下载镜像

kubeadm config images pull --config=kubeadm-init.yaml

初始化

kubeadm init --config=kubeadm-init.yaml  --upload-certs

设置kubectl默认访问的api

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

查看CRI是否是containerd

[root@test ~]# kubectl get nodes -o wide
NAME   STATUS     ROLES                  AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
test   NotReady   control-plane,master   10m   v1.20.5   192.168.1.80   <none>        CentOS Linux 7 (Core)   3.10.0-1160.21.1.el7.x86_64   containerd://1.4.4

根据自己的需要部署网络插件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101786.html原文链接:https://javaforall.net

(0)
上一篇 2021年6月4日 上午8:00
下一篇 2021年6月4日 上午9:00


相关推荐

  • 解决CSDN富文本编辑器回车换行间距过大

    解决CSDN富文本编辑器回车换行间距过大在CSDN富文本编辑器中直接按回车(Enter)换行后文本间距会很大,解决方法是同时按住Shift+Enter,换行后间距就会很小!如下图所示:原理:Enter产生硬回车,它在换行的同时也起着段落分隔的作用。Shift+Enter产生软回车,它换行,但是并不换段,即前后两段文字在Word中属于同一“段”。…

    2022年5月1日
    83
  • eclipse卸载android环境插件

    卸载eclipse-preference左侧导航栏中Android模块help-installnewsoftware–whatisalreadyinstalled?在弹出的界面选择android相关的插件卸载,重启eclipse

    2022年4月6日
    42
  • PyTorch实现的ResNet50、ResNet101和ResNet152

    PyTorch实现的ResNet50、ResNet101和ResNet152PyTorch实现的ResNet50、ResNet101和ResNet152importtorchimporttorch.nnasnnimporttorchvisionprint(&amp;quot;PyTorchVersion:&amp;quot;,torch.__version__)print(&amp;quot;TorchvisionVersion:&amp;quot;,torchvision.__version__)

    2022年10月7日
    5
  • 树莓派4B 安装opencv完整教程基于python3(各种错误解决)

    树莓派4B 安装opencv完整教程基于python3(各种错误解决)本人一直在做opencv的项目,需要入手一块树莓派来在移动端跑opencv,所以买了一块树莓派4B,然后安装上了系统,开启了曲折的opencv安装之旅。首先有幸看到子豪兄的视频,还是很好的,所以直接跟着它子豪兄教你在树莓派上安装OpenCV教程安装opencv,但是后来发现各种不可名状的错误,最后发现他的是基于树莓派3B+,环境是python3.5,但是树莓派4B的环境是python4B,所以不…

    2022年6月11日
    64
  • pycharm安装django失败

    pycharm安装django失败pycharm 安装 django 失败 原因是报了一个 ssl 异常 也就是说和国外源站服务器 ssl 失败 所以选用国内源站安装 选中 Options 输入 ihttps pypi tuna tsinghua edu cn simple 然后再点击 InstallPacka 即可安装成功 这里有个小问题 手动执行 pipinstall ixxx 也不能安装 遗留问题

    2026年3月16日
    2
  • opencv的imread函数_opencv imwrite

    opencv的imread函数_opencv imwrite近日,开始学习图像处理,思前想后决定以opencv作为实验基础。遂完成图片读取和显示功能。Imread作为常用的图像读取函数,虽然简单,但是参数的选择非常重要,直接影响到后期处理。同时在调试学习过程中也可以学习到图像处理的知识。0函数原型   Matimread(constString&filename,intflags=IMREAD_COLOR);

    2022年10月14日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号