基于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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ubuntu安装goland_ubuntu安装kali工具集

    ubuntu安装goland_ubuntu安装kali工具集1下载地址可以从go语言中文网下载最新的Linux包,地址如下:https://studygolang.com/dl/golang/go1.17.3.linux-amd64.tar.gzhttps://studygolang.com/dl/golang/go1.17.3.linux-amd64.tar.gz2安装进入home目录,使用wget下载子并解压,修改名字,然后创建链接(这个目的是方便后续切换golang版本的时候,只需要修改链接即可),脚本如下:cd~wgethttps

    2022年10月10日
  • 如何在firefox 7的地址栏里显示http://前缀

    如何在firefox 7的地址栏里显示http://前缀

  • Idea使用SVN教程

    Idea使用SVN教程第一步:下载svn的客户端,通俗一点来说就是小乌龟啦!去电脑管理的软件管理里面可以直接下载,方便迅速 下载之后直接安装就好了,但是要注意这里的这个文件也要安装上,默认是不安装的,如果不安装,svn中的bin目录下就会没有svn.exe,这个待会会用到,所以一点要注意哦。(都是坑啊)  然后就下一步下一步就安装好了。第二步:如果已经搭建好了svn服务的话,就要开始在idea中配置相关的配置了…

  • 机器学习—决策树原理(python代码实现)

    机器学习—决策树原理(python代码实现)首先,决策树(DecisionTree)是一种基本的分类与回归方法,在这里主要讨论用于分类的决策树。决策树的学习通常包含三个步骤:特征选择,决策树的生成,决策树的剪枝。优点:计算复杂度不高,输出结果易于理解,对中间值的缺失值不敏感,可以处理不相关特征数据。 缺点:可能会产生过度匹配的问题。 使用数据类型:数值型和标称型。那么具体的来通过一个例子说明一下决策树。下面这个例子是通过贷款…

  • String字符串反转

    这道题在面试的时候被问过,在此给大家分享一下。方法一、通过StringBuiler的reverse()的方法,最快的方式。publicstaticStringreverseStringBuilder(Strings){StringBuildersb=newStringBuilder(s);Stringreverse=sb.reverse().t…

  • html 页面加载中 请稍候,html 提示“数据在加载中,请稍后……”

    html 页面加载中 请稍候,html 提示“数据在加载中,请稍后……”项目完成了不过因为FileNet加载数据比较慢,所以3-4条记录加载也至少要10几秒,所以客户提出要有一个提示”提示数据加载,请稍后……“这个问题。这个东西开始实现起来不太容易。开始有一个解决方案就是利用一个div,在div里面使用背景图片,加载一个gif动态的图片,再利用div的display可以实现提示。不过这个方法明显的不合适,所以又换了一种实现方式。效果如下图所示。js代码如下varo…

    2022年10月28日

发表回复

您的电子邮箱地址不会被公开。

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