前语

k8s宣告弃用Docker?究竟弃用了什么

时刻 事情
2020 k8s在v1.20版别发布时宣告将在未来弃用对Dockershim的支撑
2022 k8s发布v1.24版别,正式剔除Dockershim

首要,并不是弃用Docker容器,想要布置k8s和Docker容器环境的小伙伴彻底不用担心!Docker镜像容器依然能够正常被调用,仅有的差异便是最新版k8s会绕过Docker直接调用其内部的containerd

本文运用的布置环境

至少一个master,2个slave。你能够用虚拟机搞,也能够花钱买服务器,反正至少启三个来用。

环境参数 描述
布置方法 多虚拟机 穷,我是学生,服务器什么的,不或许
操作体系 CentOS 7 外置Win10,内置CentOS 7
CPU 2个1核 每个虚拟机节点必须2个逻辑CPU起步,不然k8s布置不了
内存 4G 真的4G起步,每台虚拟机2G只能保证将就运转
k8s+Docker,跑不了其他服务
存储 20G 大点也行,其实假设还要布置Python等环境的话主张40G

k8s+Docker部署方法

环境装备的小tips

假设你也想只用虚拟机玩玩,那么咱们能够去官网或一些学校镜像站下载iso文件来装置

指路!

  1. wiki.centos.org/Download 官网的历史版别网页,供给iso下载
  2. mirrors.bupt.edu.cn/centos/7/is… 打个广告,北京邮电大学镜像站的centos 7

本文运用的版别号

软件 版别号
Kubernetes(k8s) 1.23.0
Docker 20.10.0.3

Docker装置及装备

以下装备需求在主节点和一切从节点履行!\color{red}\textbf {以下装备需求在主节点和一切从节点履行!}

装备库房

这一步是为了拉取docker时速度快点,用的是阿里云的centOS 7源。

需求留意的是,Docker版别务必和k8s支撑的版别对应一下。本文用的是k8s 1.23.0,装置的时分假设Docker不是20以下的会报正告(尽管或许没什么事不用管,但还是选好版别再说吧)

咱们输入如下指令,来装备阿里云yum库房,并使其生效:

cd /etc/yum.repos.d
mvCentOS-Base.repoCentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
k8s+Docker部署方法

为linux装置指定版别docker

咱们能够运用如下指令查看咱们的yum库房有什么docker可装。我挑选的是20.10.0.3这个版别。

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce-20.10.0-3.el7
k8s+Docker部署方法

docker装备

咱们首要发动Docker:

systemctl start docker

这时/etc/docker会自动生成。咱们需求进行一些自定义装备,设置阿里云源而且修正docker办理体系cgroup的方法为systemd(和k8s共同才能正常装置发动k8s)

vi /etc/docker/daemon.json
########## 以下是文件内的具体内容 ###########
{
  "registry-mirrors": ["<这儿,各位能够自行注册登录阿里云容器镜像服务,获得加速源镜像url>"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

########## 随后咱们重启docker ###########
systemctl restart docker

这儿附上阿里云镜像服务网址:cr.console.aliyun.com/cn-hangzhou…

k8s+Docker部署方法

k8s装备及装置

装置前装备

以下装备需求在主节点和一切从节点履行!\color{red}\textbf {以下装备需求在主节点和一切从节点履行!}

装置前的装备首要需求完成如下几件事:

  1. 封闭防火墙,设置网络允许接纳任意来源的恳求
  2. 封闭selinux,封闭swap,并设置开机自动封闭
  3. 在hosts文件装备主从节点ip
  4. 装备k8s的路由设置、镜像源

咱们顺次输入如下代码(具体多少个从节点视各位具体情况而定):

点击 打开/收起 代码块
iptables -P FORWARD ACCEPT
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0
systemctl disable firewalld && systemctl stop firewalld
cat >>/etc/hosts << EOF                                             
<你的主节点ip> k8s-master
<你的从节点ip1> k8s-slave1
<你的从节点ip2> k8s-slave2
<你的从节点ip3> k8s-slave3
<你的从节点ip4> k8s-slave4
EOF
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

装置k8s

版别视情况而定。我挑选k8s v1.23.0:

yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0

主节点装备

以下操作只在主节点进行!\color{red}\textbf {以下操作只在主节点进行!}

利用kubeadm生成默许装备的yaml文件,而且需求改一下。咱们首要把默许装备生成出来:

kubeadm config print init-defaults > kubeadm.yaml

随后,分别进行如下改动

######### :11,修正 #########
localAPIEndpoint:
  advertiseAddress: <这儿换成master的地址>
######### :30,修正 #########
imageRepository: registry.aliyuncs.com/google_containers
######### :33,新增podSubnet这一行 #########
networking:
  podSubnet: 10.244.0.0/16

主节点发动

kubeadm config images pull --config kubeadm.yaml
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
kubeadm init --config kubeadm.yaml

假设发动过程中报错

[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1

那就再多履行一句:

echo 1 > /proc/sys/net/ipv4/ip_forward

我记录了其时发动完后的成果,为了运用kubectl,此时咱们需求遵从官方给的几行代码履行以下,此外,这儿最后两行奉告了怎么让从节点参加集群,咱们只需求将这个输入到从节点那就行:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl get nodes

k8s+Docker部署方法

网络插件装置

这一步很重要,不装置网络插件的话k8s默许是无法随从节点通讯的。我挑选的产品是calico。

首要进入calico官方文档查看calico支撑的k8s版别。我查看的是calico 3.23,对应的软件要求能够在calico v3.23 System Reauirements里查看到。

k8s+Docker部署方法

输入如下指令布置calico,假设被墙了能够去gitee上搜一个calico,进入manifest目录下载calico.yaml。需求留意的是,咱们在上面装备过docker镜像的目的便是运用国内镜像,可是下载下来的calico.yaml的镜像挑选依然是被墙了的docker.io,需求改过来,我运用的是sed指令,将docker.io删掉。

wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml --no-check-certificate
cat calico.yaml | grep -n image
##4316:          image: docker.io/calico/cni:v3.23.5
##4343:          image: docker.io/calico/cni:v3.23.5
##4385:          image: docker.io/calico/node:v3.23.5
##4410:          image: docker.io/calico/node:v3.23.5
##4632:          image: docker.io/calico/kube-controllers:v3.23.5
sed -i 's#docker.io/##g' calico.yaml

查看一下布置情况,一般运转calico后要过一瞬间,会发现一切节点都将处于Ready状况,现在能够正常进行集群的通讯了! 在这个的等待的过程中,往往会呈现ImagePullBackOff的情况,即镜像拉取失利。先耐心等一下,假设接连数十分钟还这个姿态,或许就得考虑直接去各个节点直接docker pull,或许给docker换换镜像了

kubectl apply -f calico.yaml
kubectl get pod -n kube-system | grep calico
kubectl get nodes

k8s+Docker部署方法

k8s+Docker部署方法

新的从节点怎么参加集群

假设咱们未来创建了新的虚拟机,怎么参加现已发动了的集群呢?

在master节点输入如下指令,将得到的成果输入新的从节点即可:

kubeadm token create --print-join-command

怎么封闭并驱逐从节点

这个其实严格履行的话挺麻烦的,以slave1为例,咱们需求顺次输入如下指令:

# 把slave1的资源驱赶到其他节点
kubectl drain k8s-slave1 --ignore-daemonsets
# 标记slave1为不可调度
kubectl uncordon k8s-slave1
# 从集群删去slave1
kubectl delete node k8s-slave1

主节点怎么停止

kubectl drain node --ignore-daemonsets --delete-local-data --force

主节点怎么删去服务?

比方咱们布置了一个test-nginx服务,可是想把它删了,释放其容器资源

kubectl get pods | grep test-nginx | awk '{print $1}' | xargs kubectl delete pod