目录
5.所有节点安装kubeadm,kubelet和kubectl
[2. 部署流程](#2. 部署流程)
5.所有节点安装kubeadm,kubelet和kubectl
2.Kubernetes各版本对应支持的docker版本列表
[3.Kubernetes 1.24 1.25 集群使用docker作为容器](#3.Kubernetes 1.24 1.25 集群使用docker作为容器)
[5.kubeadm join命令将node加入master时报错](#5.kubeadm join命令将node加入master时报错)
6.coredns一直处于ContainerCreating
一、理论
1.kubeadm
(1) 概念
Kubeadm 是一个提供了 kubeadm init
和 kubeadm join
的工具, 作为创建 Kubernetes 集群的 "快捷途径" 的最佳实践。
kubeadm 通过执行必要的操作来启动和运行最小可用集群。 按照设计,它只关注启动引导,而非配置机器。同样的, 安装各种 "锦上添花" 的扩展,例如 Kubernetes Dashboard、 监控方案、以及特定云平台的扩展,都不在讨论范围内。
相反,在 kubeadm 之上构建更高级别以及更加合规的工具, 理想情况下,使用 kubeadm 作为所有部署工作的基准将会更加易于创建一致性集群

(2)管理命令
bash
kubeadm init 用于搭建控制平面节点
kubeadm join 用于搭建工作节点并将其加入到集群中
kubeadm upgrade 用于升级 Kubernetes 集群到新版本
kubeadm config 如果你使用了 v1.7.x 或更低版本的 kubeadm 版本初始化你的集群,则使用 kubeadm upgrade 来配置你的集群
kubeadm token 用于管理 kubeadm join 使用的令牌
kubeadm reset 用于恢复通过 kubeadm init 或者 kubeadm join 命令对节点进行的任何变更
kubeadm certs 用于管理 Kubernetes 证书
kubeadm kubeconfig 用于管理 kubeconfig 文件
kubeadm version 用于打印 kubeadm 的版本信息
kubeadm alpha 用于预览一组可用于收集社区反馈的特性
2.Kubeadm部署K8S单Master架构
(1)架构

(2)软件包
本次实验所需要的软件:
【免费】K8S单Master节点kubeadm方式(软件与配置文件)资源-CSDN文库
(3)部署流程
bash
1、在所有节点上安装Docker和kubeadm
2、部署Kubernetes Master
3、部署容器网络插件
4、部署 Kubernetes Node,将节点加入Kubernetes集群中
5、部署 Dashboard Web 页面,可视化查看Kubernetes资源
6、部署 Harbor 私有仓库,存放镜像资源
3.环境部署
(1)所有节点,关闭防火墙规则,关闭selinux,关闭swap交换
bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a #交换分区必须要关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
(2)加载 ip_vs 模块
bash
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
(3)修改主机名
bash
hostnamectl set-hostname master
hostnamectl set-hostname node01
hostnamectl set-hostname node02
所有节点修改hosts文件
bash
vim /etc/hosts
192.168.204.171 master
192.168.204.173 node01
192.168.204.175 node02
(4)调整内核参数
bash
cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
生效参数
sysctl --system
4.所有节点安装docker
(1)安装
bash
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
(2)加速地址(需要修改为自己的)
bash
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
#日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。
systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service
docker info | grep "Cgroup Driver"
Cgroup Driver: systemd
5.所有节点安装kubeadm,kubelet和kubectl
(1)定义kubernetes源
bash
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=0
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
yum install -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1
开机自启kubelet
bash
systemctl enable kubelet.service
6.部署K8S集群
(1)查看初始化需要的镜像
bash
kubeadm config images list
(2)在 master 节点上传 kubeadm-basic.images.tar.gz 压缩包至 /opt 目录
bash
cd /opt
tar zxvf kubeadm-basic.images.tar.gz
(3)使用for循环载入镜像
bash
for i in $(ls /opt/kubeadm-basic.images/*.tar); do docker load -i $i; done
(4)复制镜像和脚本到 node 节点,并在 node 节点上执行脚本 bash /opt/load-images.sh
bash
scp -r kubeadm-basic.images root@node01:/opt
scp -r kubeadm-basic.images root@node02:/opt
(5)初始化kubeadm
方法一:
bash
kubeadm config print init-defaults > /opt/kubeadm-config.yaml
修改配置文件
bash
cd /opt/
vim kubeadm-config.yaml
......
11 localAPIEndpoint:
12 advertiseAddress: 192.168.204.171 #指定master节点的IP地址
13 bindPort: 6443
......
34 kubernetesVersion: v1.15.1 #指定kubernetes版本号
35 networking:
36 dnsDomain: cluster.local
37 podSubnet: "10.244.0.0/16" #指定pod网段,10.244.0.0/16用于匹配flannel默认网段
38 serviceSubnet: 10.96.0.0/16 #指定service网段
39 scheduler: {}
--- #末尾再添加以下内容
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs #把默认的service调度方式改为ipvs模式
bash
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
#--experimental-upload-certs 参数可以在后续执行加入节点时自动分发证书文件,k8sV1.16版本开始替换为 --upload-certs
bash
#tee kubeadm-init.log 用以输出日志
//查看 kubeadm-init 日志
less kubeadm-init.log
//kubernetes配置文件目录
ls /etc/kubernetes/
//存放ca等证书和密码的目录
ls /etc/kubernetes/pki
方法二:
bash
kubeadm init \
--apiserver-advertise-address=0.0.0.0 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.15.1 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
--------------------------------------------------------------------------------------------
初始化集群需使用kubeadm init命令,可以指定具体参数初始化,也可以指定配置文件初始化。
可选参数:
--apiserver-advertise-address:apiserver通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址
--apiserver-bind-port:apiserver的监听端口,默认是6443
--cert-dir:通讯的ssl证书文件,默认/etc/kubernetes/pki
--control-plane-endpoint:控制台平面的共享终端,可以是负载均衡的ip地址或者dns域名,高可用集群时需要添加
--image-repository:拉取镜像的镜像仓库,默认是k8s.gcr.io
--kubernetes-version:指定kubernetes版本
--pod-network-cidr:pod资源的网段,需与pod网络插件的值设置一致。通常,Flannel网络插件的默认为10.244.0.0/16,Calico插件的默认值为192.168.0.0/16;
--service-cidr:service资源的网段
--service-dns-domain:service全域名的后缀,默认是cluster.local
---------------------------------------------------------------------------------------------
方法二初始化后需要修改 kube-proxy 的 configmap,开启 ipvs
kubectl edit cm kube-proxy -n=kube-system
修改mode: ipvs
提示:
......
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.204.171:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:594fd0a687443eb0f161d9ae76efcf27588af78579c8e362d70fc06986f0454b
更改kube-proxy配置
bash
kubectl edit configmap kube-proxy -n kube-system
找到如下部分的内容
bash
minSyncPeriod: 0s
scheduler: ""
syncPeriod: 30s
kind: KubeProxyConfiguration
metricsBindAddress: 127.0.0.1:10249
mode: "ipvs" # 加上这个
nodePortAddresses: null
其中mode原来是空,默认为iptables模式,改为ipvs
scheduler默认是空,默认负载均衡算法为轮询
编辑完,保存退出
(6)设定kubectl
kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 "$HOME/.kube/config" 的路径进行加载。
bash
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
在 node 节点上执行 kubeadm join 命令加入群集
bash
kubeadm join 192.168.204.171:6443 --token d3q8kf.wvis2wbfdfymwic4 \
--discovery-token-ca-cert-hash sha256:6d851b46ccd6c61a81d3aa08eae4971bc7a5ba32dd4918f7981c482e3fdd4d52
(7)所有节点部署网络插件flannel
方法一:
所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件
bash
cd /opt
docker load < flannel.tar
在 master 节点创建 flannel 资源
bash
kubectl apply -f kube-flannel.yml
方法二:
bash
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
在master节点查看节点状态(需要等几分钟)
bash
kubectl get nodes
kubectl get pods -n kube-system
测试 pod 资源创建
bash
kubectl create deployment nginx --image=nginx
暴露端口提供服务
bash
kubectl expose deployment nginx --port=80 --type=NodePort
测试访问
bash
curl http://node01:30833
扩展3个副本
bash
kubectl scale deployment nginx --replicas=3
kubectl get pods -o wide
7.安装dashboard
(1)所有节点安装dashboard
方法一:
所有节点上传dashboard镜像 dashboard.tar 到 /opt 目录,master节点上传kubernetes-dashboard.yaml文件
bash
cd /opt/
docker load < dashboard.tar
kubectl apply -f kubernetes-dashboard.yaml
方法二:
bash
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
查看所有容器运行状态
bash
kubectl get pods,svc -n kube-system -o wide
使用浏览器访问
bash
https://node02:30001/
https://192.168.204.175:30001/
创建service account并绑定默认cluster-admin管理员集群角色
bash
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
获取令牌密钥
bash
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
复制token令牌直接登录网站
8.安装Harbor私有仓库
(1)在192.168.204.176服务器操作
修改主机名
bash
hostnamectl set-hostname hub.david.com
所有节点加上主机名映射
bash
echo '192.168.204.176 hub.david.com' >> /etc/hosts
(2) 安装 docker
bash
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
私有仓库配置(加速地址需要修改为自己的)
bash
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"insecure-registries": ["https://hub.david.com"]
}
EOF
systemctl start docker
systemctl enable docker
所有 node 节点都修改 docker 配置文件,加上私有仓库配置(加速地址需要修改为自己的)
bash
cat /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"insecure-registries": ["https://hub.david.com"]
}
EOF
(3)安装 Harbor
上传 harbor-offline-installer-v1.2.2.tgz 和 docker-compose 文件到 /opt 目录
bash
cd /opt
cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
bash
tar zxvf harbor-offline-installer-v1.2.2.tgz
cd harbor/
vim harbor.cfg
5 hostname = hub.david.com
9 ui_url_protocol = https
24 ssl_cert = /data/cert/server.crt
25 ssl_cert_key = /data/cert/server.key
59 harbor_admin_password = Harbor12345
生成证书
bash
mkdir -p /data/cert
cd /data/cert
#生成私钥
openssl genrsa -des3 -out server.key 2048
输入两遍密码:123456
bash
[root@hub cert]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:JS
Locality Name (eg, city) [Default City]:NJ
Organization Name (eg, company) [Default Company Ltd]:DAVID
Organizational Unit Name (eg, section) []:DAVID
Common Name (eg, your name or your server's hostname) []:hub.david.com
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@hub cert]#
备份私钥
bash
cp server.key server.key.org
清除私钥密码
bash
openssl rsa -in server.key.org -out server.key
输入私钥密码:123456
签名证书
bash
openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt
bash
chmod +x /data/cert/*
cd /opt/harbor/
./install.sh
浏览器访问
bash
浏览器访问:https://hub.david.com
用户名:admin
密码:Harbor12345
在一个node节点上登录harbor
bash
docker login -u admin -p Harbor12345 https://hub.david.com
上传镜像
bash
docker tag nginx:latest hub.david.com/library/nginx:v1
docker push hub.david.com/library/nginx:v1
在master节点上删除之前创建的nginx资源
bash
kubectl delete deployment nginx
kubectl run nginx-deployment --image=hub.david.com/library/nginx:v1 --port=80 --replicas=3
kubectl expose deployment nginx-deployment --port=30000 --target-port=80
kubectl get svc,pods
bash
yum install ipvsadm -y
ipvsadm -Ln
登录测试一下
bash
curl 10.96.14.134:30000
bash
kubectl edit svc nginx-deployment
25 type: NodePort #把调度策略改成NodePort
浏览器访问
bash
kubectl get svc
浏览器访问:
192.168.204.171:30118
192.168.204.173:30118
192.168.204.175:30118
9.内核参数优化方案
bash
cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 #禁止使用 swap 空间,只有当系统内存不足(OOM)时才允许使用它
vm.overcommit_memory=1 #不检查物理内存是否够用
vm.panic_on_oom=0 #开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963 #指定最大文件句柄数
fs.nr_open=52706963 #仅4.4以上版本支持
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
二、实验
1.Kubeadm部署K8S单Master架构
(1)环境
表1 环境
|----------|-----------------|---------------------------------------------|-------------------|
| master | 192.168.204.171 | docker、kubeadm、kubelet、kubectl、flannel | 4C/4G,cpu核心数要求大于2 |
| node01 | 192.168.204.173 | docker、kubeadm、kubelet、kubectl、flannel | 2C/2G |
| node02 | 192.168.204.175 | docker、kubeadm、kubelet、kubectl、flannel | 2C/2G |
| Harbor节点 | 192.168.204.176 | docker、docker-compose、harbor-offline-v1.2.2 | 4C/4G |
2. 部署流程
bash
1、在所有节点上安装Docker和kubeadm
2、部署Kubernetes Master
3、部署容器网络插件
4、部署 Kubernetes Node,将节点加入Kubernetes集群中
5、部署 Dashboard Web 页面,可视化查看Kubernetes资源
6、部署 Harbor 私有仓库,存放镜像资源
3.环境部署
(1)所有节点,关闭防火墙规则,关闭selinux,关闭swap交换for i in $(ls

(2)加载 ip_vs 模块

(3)修改主机名



所有节点修改hosts文件




(4)调整内核参数
master


node1


node2


4.所有节点安装docker
(1)安装
安装依赖包


添加repo


安装docker


(2)加速地址



启动


5.所有节点安装kubeadm,kubelet和kubectl
(1)定义kubernetes源




安装



开机自启kubelet


6.部署K8S集群
(1)查看初始化需要的镜像

(2)在 master 节点上传 kubeadm-basic.images.tar.gz 压缩包至 /opt 目录

(3)使用for循环载入镜像

(4)复制镜像和脚本到 node 节点,并在 node 节点上执行脚本 bash /opt/load-images.sh

(5)初始化kubeadm
方法一:

修改配置文件
启动

因老版本问题,如此方法启动失败,需要降级docker版本并采用第二种方法
方法二:


kubernetes配置文件目录存放ca等证书和密码的目录

(6)设定kubectl
kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 "$HOME/.kube/config" 的路径进行加载。
master节点生成token


在 node 节点上执行 kubeadm join 命令加入群集


查看所有节点(目前状态为NotReady)

(7)所有节点部署网络插件flannel
方法一:
所有节点上传flannel镜像 flannel.tar 到 /opt 目录,master节点上传 kube-flannel.yml 文件

在 master 节点创建 flannel 资源

在master节点查看节点状态(需要等几分钟)


测试 pod 资源创建

暴露端口提供服务

查询service

测试访问

扩展3个副本
7.安装dashboard
(1)所有节点安装dashboard
方法一:
所有节点上传dashboard镜像 dashboard.tar 到 /opt 目录,master节点上传kubernetes-dashboard.yaml文件



查看所有容器运行状态

使用浏览器访问
创建service account并绑定默认cluster-admin管理员集群角色

获取令牌密钥

需要输入令牌

复制token令牌直接登录网站

登录成功

8.安装Harbor私有仓库
(1)在192.168.204.176服务器操作
修改主机名

所有节点加上主机名映射



(2) 安装 docker
已安装(经过20到18版本降级处理)

修改镜像加速地址,所有 node 节点都修改 docker 配置文件,加上私有仓库配置



启动


(3)安装 Harbor
上传 harbor-offline-installer-v1.2.2.tgz 和 docker-compose 文件到 /opt 目录


修改配置文件




生成证书,输入两遍密码:123456

生成证书

备份私钥

清除私钥密码

签名证书,输入私钥密码:123456



浏览器访问

登录界面

输入账户密码

登录成功

在一个node节点上登录harbor

上传镜像


推送成功

在master节点上删除之前创建的nginx资源

安装
登录测试一下

把调度策略改成NodePort
获取物理机端口映射地址为30118

bash
浏览器访问:
192.168.204.171:30118
192.168.204.173:30118
192.168:204.175:30118


三、问题
1.加入k8s集群报错
(1)报错
WARNING SystemVerification\]: this Docker version is not on the list of validated versions: 24.0.5. Latest validated version: 18.09

(2)原因分析
此 Docker 版本不在已验证版本列表中:24.0.5。 最新验证版本:18.09
(3)解决方法
分别查看docker和k8s的版本
```bash
kubectl version
docker version
```


降低docker版本到18.09
查看当前仓库支持的docker版本:
```bash
yum list docker-ce --showduplicates | sort -r
```

选择18.09的版本,降级到18.06版本会报错
语法: yum downgrade --setopt=obsoletes=0 -y docker-ce-v e r s i o n d o c k e r − c e − s e l i n u x − {version} docker-ce-selinux-versiondocker−ce−selinux−{version}
降低docker版本到18.06.3.ce-3.el7
```bash
yum downgrade --setopt=obsoletes=0 -y docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7 containerd.io
```
查看降级后版本
```bash
systemctl start docker
docker version
```

## 2.Kubernetes各版本对应支持的docker版本列表
(1)解决
Kubernetes主要做Docker的容器化管理,总结一下如何查看k8s对应支持的docker版本的方法。
在GitHub可以查看所有Kubernetets版本信息:https://github.com/kubernetes/kubernetes/releases
```bash
截止2019.08.09最新的版本支持信息:
Kubernetes 1.15.2 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09
Kubernetes 1.15.1 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09
Kubernetes 1.15.0 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09
Kubernetes 1.14.5 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09
Kubernetes 1.14.4 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09
Kubernetes 1.14.3 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09
Kubernetes 1.14.2 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09
Kubernetes 1.14.1 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09
Kubernetes 1.14.0 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09
Kubernetes 1.13.5 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06
Kubernetes 1.13.5 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06
Kubernetes 1.13.4 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06
Kubernetes 1.13.3 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06
Kubernetes 1.13.2 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06
Kubernetes 1.13.1 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06
Kubernetes 1.13.0 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06
Kubernetes 1.12.* -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06
Kubernetes 1.11.* -->Docker版本1.11.2到1.13.1、17.03
Kubernetes 1.10.* -->Docker版本1.11.2到1.13.1、17.03
```
查看方式:
1)老版本
点击链接进入到GitHub中查找对应的版本后点击 CHANGELOG-1.15.md

点进去查找docker versions:(页面现在存在404情况)

2)新版本:
点击链接进入到GitHub中查找对应的版本后点击 the CHANGELOG

## 3.Kubernetes 1.24 1.25 集群使用docker作为容器
(1)问题
在新版本Kubernetes环境(1.24以及以上版本)下官方不在支持docker作为容器运行时了,若要继续使用docker 需要对docker进行配置一番。需要安装cri-docker作为Kubernetes容器。
(2)解决
查看当前容器运行时
```bash
# 查看指定节点容器运行时
kubectl describe node k8s-node1 | grep Container
Container Runtime Version: containerd://1.6.8
# 查看所有节点容器运行时
kubectl describe node | grep Container
Container Runtime Version: containerd://1.6.8
Container Runtime Version: containerd://1.6.8
Container Runtime Version: containerd://1.6.8
Container Runtime Version: containerd://1.6.8
Container Runtime Version: containerd://1.6.8
Container Runtime Version: containerd://1.6.8
Container Runtime Version: containerd://1.6.8
Container Runtime Version: containerd://1.6.8
```
安装docker
```bash
# 更新源信息
yum update
# 安装必要软件
yum install -y yum-utils device-mapper-persistent-data lvm2
# 写入docker源信息
sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 更新源信息并进行安装
yum update
yum install docker-ce docker-ce-cli containerd.io
# 配置加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
```
安装cri-docker
```bash
# 由于1.24以及更高版本不支持docker所以安装cri-docker
# 下载cri-docker
wget https://ghproxy.com/https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.5/cri-dockerd-0.2.5.amd64.tgz
# 解压cri-docker
tar xvf cri-dockerd-0.2.5.amd64.tgz
cp cri-dockerd/cri-dockerd /usr/bin/
# 写入启动配置文件
cat > /usr/lib/systemd/system/cri-docker.service <