俭经也是好名 發表於 2019-5-23 16:25:00

kubernetes之kubeadm 安装kubernetes 高可用集群

<h2>1. 架构信息</h2>
<div class="cnblogs_code">
<pre>系统版本:CentOS 7.6<span>
内核:3.10.0-957<span>.el7.x86_64
Kubernetes: v1.14.1<span>
Docker-ce: 18.09.5<span>
推荐硬件配置:4核8G

Keepalived保证apiserever服务器的IP高可用
Haproxy实现apiserver的负载均衡&nbsp;</span></span></span></span></pre>
</div>
<h3>2. 节点信息&nbsp;</h3>
<p><span>目前测试为 6 台虚拟机,etcd采用 rpm 安装、kubernetes 使用二进制安装,使用 systemd 来做管理,网络组件采用 flannel,Master 实现了 HA,&nbsp;集群开启 RBAC;master 不负载 pod,在分发证书等阶段将在另外一台主机上执行,该主机对集群内所有节点配置了 ssh 秘钥登录,基本环境如下</span></p>
<table border="0" align="left">
<tbody>
<tr>
<td>hostname</td>
<td>ip</td>
<td>组件</td>
<td>内存</td>
<td>cpu</td>
</tr>
<tr>
<td>node-01</td>
<td>172.19.8.111</td>
<td>kube-apiserver、kube-controller-manager、etcd、haproxy、keepalived</td>
<td>8G</td>
<td>4c</td>
</tr>
<tr>
<td>node-02</td>
<td>172.19.8.112</td>
<td>kube-apiserver、kube-controller-manager、etcd、haproxy、keepalived</td>
<td>8G</td>
<td>4c</td>
</tr>
<tr>
<td>node-03</td>
<td>172.19.8.113</td>
<td>kube-apiserver、kube-controller-manager、etcd</td>
<td>8G</td>
<td>4c</td>
</tr>
<tr>
<td>node-04</td>
<td>172.19.8.114</td>
<td>node</td>
<td>8G</td>
<td>4c</td>
</tr>
<tr>
<td>node-05</td>
<td>172.19.8.115</td>
<td>node</td>
<td>8G</td>
<td>4c</td>
</tr>
<tr>
<td>node-06</td>
<td>172.19.8.116</td>
<td>node</td>
<td>8G</td>
<td>4c</td>
</tr>
<tr>
<td>VIP</td>
<td>172.19.8.250</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<h3>&nbsp;</h3>
<h3>&nbsp;</h3>
<h3>&nbsp;</h3>
<h3>&nbsp;</h3>
<h3><br>3.1&nbsp;&nbsp;关闭防火墙和selinux3. 部署前准备工作</h3>
<div class="cnblogs_code">
<div>#&nbsp;sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config</div>
<div>#&nbsp;setenforce 0</div>
<div>#&nbsp;systemctl disable firewalld</div>
<div>#&nbsp;systemctl stop firewalld</div>

</div>
<p>&nbsp;</p>
<h4>3.2 关闭swap</h4>
<div class="cnblogs_code">
<pre>#&nbsp;swapoff -<span>a
注:修改/etc/fstab,注销swap相关信息</span></pre>
</div>
<h4>3.3 添加host记录</h4>
<div class="cnblogs_code">
<pre># cat &gt;&gt;/etc/hosts&lt;&lt;<span>EOF
172.19.8.111 node-01
172.19.8.112 node-02
172.19.8.113 node-03
172.19.8.114 node-04
172.19.8.115 node-05
172.19.8.116 node-06<span>
EOF</span></span></pre>
</div>
<h4>3.4 打通ssh,&nbsp;node-01免密登录其他服务器</h4>
<div class="cnblogs_code">
<pre># ssh-keygen<span>
Generating public/<span>private rsa key pair.
Enter file in which to save the key (/root/.ssh/<span>id_rsa):
Enter passphrase (empty for<span> no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/<span>id_rsa.
Your public key has been saved in /root/.ssh/<span>id_rsa.pub.
The key fingerprint is:
SHA256:uckCmzy46SfU6Lq9jRbugn0U8vQsr5H+PtfGBsvrfCA root@node-01<span>
The key's randomart image is:
+-------+
|               |
|               |
|               |
|. o    .       |
|   *.+S      |
|+o==E.oo       |
|.=.oBo.o+*       |
|o.**oooo+ *      |
|oBO=++o++=       |
+---------+</span></span></span></span></span></span></span></pre>
</div>
<p>&nbsp;分发node-01公钥,用于免密登录其他服务器</p>
<div class="cnblogs_code">
<pre></pre>
<pre># for n in `seq -w 01 06`;do ssh-copy-id node-$n;done</pre>
</div>
<h4>3.5&nbsp;&nbsp;配置内核参数,需要重启服务器,否则后面初始化的时候会报错。</h4>
<div class="cnblogs_code">
<pre>cat &lt;&lt;EOF &gt;/etc/sysctl.d/<span>k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1<span>
net.bridge.bridge-nf-call-iptables = 1<span>
net.ipv4.ip_nonlocal_bind = 1<span>
net.ipv4.ip_forward = 1<span>
vm.swappiness=0<span>
EOF

sysctl --system</span></span></span></span></span></span></pre>
</div>
<p>报错处理,没有桥接网络导致,需要安装docker,并启动后才会出现桥接网络</p>
<div class="cnblogs_code">
<pre># sysctl -p /etc/sysctl.d/<span>k8s.conf
net.ipv4.ip_forward = 1<span>
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-<span>ip6tables: 没有那个文件或目录
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: 没有那个文件或目录</span></span></span></pre>
</div>
<h4>3.6 如果kube-proxy使用ipvs模式,需要加载ipvs模块</h4>
<div class="cnblogs_code">
<pre>cat &gt; /etc/sysconfig/modules/ipvs.modules &lt;&lt;EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules &amp;&amp; bash /etc/sysconfig/modules/ipvs.modules &amp;&amp; lsmod | grep -e ip_vs -e nf_conntrack_ipv4</pre>
</div>
<h4>3.7&nbsp;&nbsp;添加yum源</h4>
<div class="cnblogs_code">
<pre>cat &lt;&lt;EOF &gt; /etc/yum.repos.d/<span>kubernetes.repo

name=<span>Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1<span>
gpgcheck=1<span>
repo_gpgcheck=1<span>
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*<span>
EOF</span></span></span></span></span></span></pre>
</div>
<p>考虑到国内无法拉取google源,可以使用阿里云源</p>
<div class="cnblogs_code">
<pre>$ cat &lt;&lt; EOF &gt; /etc/yum.repos.d/<span>kubernetes.repo

name=<span>Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1<span>
gpgcheck=1<span>
repo_gpgcheck=1<span>
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
<span>EOF

wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo -O /etc/yum.repos.d/epel.repo</span></span></span></span></span></span></pre>
</div>
<p><strong>以上部署需要在每个节点执行。</strong></p>
<h3>4.&nbsp;&nbsp;部署keepalived和haproxy</h3>
<h4>4.1 在node-01和node-02上面安装keepalived和haproxy</h4>
<div class="cnblogs_code">
<pre>$ yum install -y keepalived haproxy</pre>
</div>
<h4>4.2 配置keepalived</h4>
<p>node-01 配置信息</p>
<div class="cnblogs_code">
<pre># cat /etc/keepalived/<span>keepalived.conf
! Configuratile for<span> keepalived
global_defs {
notification_email {
995958026<span>@qq.com
      }
notification_email_from keepalived@ptmind.com
smtp_server 127.0.0.1<span>
smtp_connect_timeout 30<span>
router_id node-01<span>
}

vrrp_script check_apiserver {
   script "/workspace/crontab/check_apiserver"<span>
   interval 5<span>
   weight -20<span>
   fall 3<span>
   rise 1<span>
   }

vrrp_instance VIP_250 {
    state MASTER
    interface eth0
    virtual_router_id 250<span>
    priority 100<span>
    advert_int 1<span>
    authentication {
      auth_type PASS
      auth_pass 890iop
    }
    track_script {
      check_apiserver
   }
    virtual_ipaddress {
      172.19.8.250<span>
    }
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
<p>检查脚本配置</p>
<div class="cnblogs_code">
<pre>$ cat /workspace/crontab/<span>check_apiserver
#!/bin/<span>bash
curl 127.0.0.1:8080 &amp;&gt;/dev/null
if [ $? -eq 0 ];then<span>
    exit 0
else<span>
    #systemctl stop keepalived
    exit 1
fi<br>$ chmod 755 /workspace/crontab/check_apiserver</span></span></span></span></pre>
</div>
<p>node-02 配置</p>
<div class="cnblogs_code">
<pre># cat /etc/keepalived/<span>keepalived.conf
! Configuration File for<span> keepalived

global_defs {
notification_email {
435002493<span>@qq.com
      }
notification_email_from keepalived@ptmind.com
smtp_server 127.0.0.1<span>
smtp_connect_timeout 30<span>
router_id node-02<span>
}

vrrp_instance VI_250 {
    state BACKUP
    interface eth0
    virtual_router_id 250<span>
    priority 90<span>
    advert_int 1<span>
    authentication {
      auth_type PASS
      auth_pass 890iop
    }
    virtual_ipaddress {
    172.19.8.250<span>
    }
}</span></span></span></span></span></span></span></span></span></span></pre>
</div>
<h4>4.3 配置haproxy</h4>
<p>&nbsp;</p>
<div>node-01和node-02的haproxy配置是一样的。此处我们监听的是172.19.8.250的8443端口,因为haproxy是和k8s apiserver是部署在同一台服务器上,都用6443会冲突。&nbsp;</div>
<div>
<div class="cnblogs_code">
<pre># cat /etc/haproxy/<span>haproxy.cfg
global
      chroot/var/lib/<span>haproxy
      daemon
      group haproxy
      user haproxy
#      log warning
      pidfile /var/lib/<span>haproxy.pid
      maxconn 20000<span>
      spread-checks 3<span>
      nbproc 8<span>

defaults
      log   global
      mode    tcp
      retries 3<span>
      option redispatch

listen https-<span>apiserver
      bind 0.0.0.0:8443<span>
      mode tcp
      balance roundrobin
      timeout server 900s
      timeout connect 15s

      server apiserver01 172.19.8.111:6443 check port 6443 inter 5000 fall 5<span>
      server apiserver02 172.19.8.112:6443 check port 6443 inter 5000 fall 5<span>
      server apiserver03 172.19.8.113:6443 check port 6443 inter 5000 fall 5</span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
<h4>4.4 启动服务</h4>
<div class="cnblogs_code">
<pre>systemctl enable keepalived &amp;&amp;<span> systemctl start keepalived
systemctl enable haproxy &amp;&amp; systemctl start haproxy </span></pre>
</div>
</div>
<p>5 安装docker</p>
<p> 由于kubeadm对docker的版本是有要求的,需要安装与kubeadm匹配的版本。本文docker采用docker-ce</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">yum</span>-config-<span style="color: rgba(0, 0, 0, 1)">manager \
</span>--add-<span style="color: rgba(0, 0, 0, 1)">repo \
https:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">download.docker.com/linux/centos/docker-ce.repo</span>

<span style="color: rgba(0, 0, 255, 1)">yum</span> <span style="color: rgba(0, 0, 255, 1)">install</span> docker-<span style="color: rgba(0, 0, 0, 1)">ce
</span><span style="color: rgba(0, 0, 255, 1)">cat</span> &gt; /etc/docker/daemon.json &lt;&lt;<span style="color: rgba(0, 0, 0, 1)">EOF
{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">exec-opts</span><span style="color: rgba(128, 0, 0, 1)">"</span>: [<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">native.cgroupdriver=systemd</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">],
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">log-driver</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">json-file</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">log-opts</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">: {
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">max-size</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">100m</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
},
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">storage-driver</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">overlay2</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">storage-opts</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">: [
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">overlay2.override_kernel_check=true</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
]
}
EOF

</span><span style="color: rgba(0, 0, 255, 1)">mkdir</span> -p /etc/systemd/system/<span style="color: rgba(0, 0, 0, 1)">docker.service.d

# Restart Docker
systemctl daemon</span>-<span style="color: rgba(0, 0, 0, 1)">reload
systemctl restart docker<br>systemctl enable docker<br></span></pre>
</div>
<p>6 安装kubectl和kubeadm</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">yum</span> -y <span style="color: rgba(0, 0, 255, 1)">install</span> kubeadm-<span style="color: rgba(128, 0, 128, 1)">1.14</span>.<span style="color: rgba(128, 0, 128, 1)">1</span> kubectl-<span style="color: rgba(128, 0, 128, 1)">1.14</span>.<span style="color: rgba(128, 0, 128, 1)">1</span> --disableexcludes=kubernetes</pre>
</div>
<p> 设置kubelet开机启动</p>
<div class="cnblogs_code">
<pre>systemctl enable kubelet </pre>
</div>
<h3>7 配置</h3>
<h4>7.1&nbsp; 修改初始化配置</h4>
<p> 使用 kubeadm config print init-defaults &gt; kubeadm-init.yaml 打印出默认配置,然后在根据自己的环境修改配置.</p>
<div class="cnblogs_code">
<pre># kubeadm config print init-defaults &gt; kubeadm-init.yaml</pre>
</div>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">cat</span> kubeadm-<span style="color: rgba(0, 0, 0, 1)">init.yaml
apiVersion: kubeadm.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1beta1
bootstrapTokens:
</span>- <span style="color: rgba(0, 0, 255, 1)">groups</span><span style="color: rgba(0, 0, 0, 1)">:
</span>- system:bootstrappers:kubeadm:default-node-<span style="color: rgba(0, 0, 0, 1)">token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
</span>-<span style="color: rgba(0, 0, 0, 1)"> signing
</span>-<span style="color: rgba(0, 0, 0, 1)"> authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: </span><span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.111</span><span style="color: rgba(0, 0, 0, 1)">
bindPort: </span><span style="color: rgba(128, 0, 128, 1)">6443</span><span style="color: rgba(0, 0, 0, 1)">
nodeRegistration:
criSocket: </span>/var/run/<span style="color: rgba(0, 0, 0, 1)">dockershim.sock
name: node</span>-<span style="color: rgba(128, 0, 128, 1)">01</span><span style="color: rgba(0, 0, 0, 1)">
taints:
</span>-<span style="color: rgba(0, 0, 0, 1)"> effect: NoSchedule
    key: node</span>-role.kubernetes.io/<span style="color: rgba(0, 0, 0, 1)">master
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1beta1
certificatesDir: </span>/etc/kubernetes/<span style="color: rgba(0, 0, 0, 1)">pki
clusterName: k8s</span>-<span style="color: rgba(0, 0, 0, 1)">test
controlPlaneEndpoint: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">172.19.8.250:8443</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
    dataDir: </span>/var/lib/<span style="color: rgba(0, 0, 0, 1)">etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.</span><span style="color: rgba(128, 0, 128, 1)">14.0</span><span style="color: rgba(0, 0, 0, 1)">
networking:
dnsDomain: cluster.local
podSubnet: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">10.244.0.0/16</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
serviceSubnet: </span><span style="color: rgba(128, 0, 128, 1)">10.245</span>.<span style="color: rgba(128, 0, 128, 1)">0.0</span>/<span style="color: rgba(128, 0, 128, 1)">16</span><span style="color: rgba(0, 0, 0, 1)">
scheduler: {}
</span><strong><span style="color: rgba(255, 0, 0, 1)">---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"

上述部分是配置 kube-proxy 使用ipvs模式,默认为iptables模式,如果使用iptables,可以不添加红色部分。</span></strong></pre>
</div>
<p>kube-proxy说明</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">在k8s中,提供相同服务的一组pod可以抽象成一个service,通过service提供的统一入口对外提供服务,每个service都有一个虚拟IP地址(clusterip)和端口号供客户端访问。
Kube</span>-<span style="color: rgba(0, 0, 0, 1)">proxy存在于各个node节点上,主要用于Service功能的实现,具体来说,就是实现集群内的客户端pod访问service,或者是集群外的主机通过NodePort等方式访问service。
kube</span>-<span style="color: rgba(0, 0, 0, 1)">proxy默认使用的是iptables模式,通过各个node节点上的iptables规则来实现service的负载均衡,但是随着service数量的增大,iptables模式由于线性查找匹配、全量更新等特点,其性能会显著下降。
IPVS是LVS的核心组件,是一种四层负载均衡器。IPVS具有以下特点:
与Iptables同样基于Netfilter,但使用的是hash表;
支持TCP, UDP,SCTP协议,支持IPV4,IPV6;
支持多种负载均衡策略:rr, wrr, lc, wlc, </span><span style="color: rgba(0, 0, 255, 1)">sh</span><span style="color: rgba(0, 0, 0, 1)">, dh, lblc…
支持会话保持;
LVS主要由两部分组成:

ipvs(ip virtual server):即ip虚拟服务,是工作在内核空间上的一段代码,主要是实现调度的代码,它是实现负载均衡的核心。
ipvsadm: 工作在用户空间,负责为ipvs内核框架编写规则,用于定义谁是集群服务,谁是后端真实服务器。我们可以通过ipvsadm指令创建集群服务</span></pre>
</div>
<h4>7.2&nbsp; 预下载镜像</h4>
<div class="cnblogs_code">
<pre># kubeadm config images pull --config kubeadm-<span style="color: rgba(0, 0, 0, 1)">init.yaml
Pulled k8s.gcr.io/kube-apiserver:v1.<span style="color: rgba(128, 0, 128, 1)">14.0</span><span style="color: rgba(0, 0, 0, 1)">
Pulled k8s.gcr.io/kube-controller-manager:v1.<span style="color: rgba(128, 0, 128, 1)">14.0</span><span style="color: rgba(0, 0, 0, 1)">
Pulled k8s.gcr.io/kube-scheduler:v1.<span style="color: rgba(128, 0, 128, 1)">14.0</span><span style="color: rgba(0, 0, 0, 1)">
Pulled k8s.gcr.io/kube-proxy:v1.<span style="color: rgba(128, 0, 128, 1)">14.0</span><span style="color: rgba(0, 0, 0, 1)">
Pulled k8s.gcr.io/pause:<span style="color: rgba(128, 0, 128, 1)">3.1</span><span style="color: rgba(0, 0, 0, 1)">
Pulled k8s.gcr.io/etcd:<span style="color: rgba(128, 0, 128, 1)">3.3</span>.<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">
Pulled k8s.gcr.io/coredns:<span style="color: rgba(128, 0, 128, 1)">1.3</span>.<span style="color: rgba(128, 0, 128, 1)">1</span></pre>
</div>
<p>7.2.1&nbsp; 如果是国内环境,由于被墙,可能拉取失败,需要手动拉取国内镜像,然后修改tag</p>
<p> 获取需要的镜像列表</p>
<div class="cnblogs_code">
<pre># kubeadm config images list
k8s.gcr.io</span>/kube-apiserver:v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
k8s.gcr.io</span>/kube-controller-manager:v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
k8s.gcr.io</span>/kube-scheduler:v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
k8s.gcr.io</span>/kube-proxy:v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
k8s.gcr.io</span>/pause:<span style="color: rgba(128, 0, 128, 1)">3.1</span><span style="color: rgba(0, 0, 0, 1)">
k8s.gcr.io</span>/etcd:<span style="color: rgba(128, 0, 128, 1)">3.3</span>.<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">
k8s.gcr.io</span>/coredns:<span style="color: rgba(128, 0, 128, 1)">1.3</span>.<span style="color: rgba(128, 0, 128, 1)">1</span></pre>
</div>
<p> 可从阿里云的镜像替换为谷歌的镜像</p>
<div class="cnblogs_code">
<pre>#!/bin/<span style="color: rgba(0, 0, 0, 1)">bash
images</span>=<span style="color: rgba(0, 0, 0, 1)">(
kube</span>-apiserver:v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
kube</span>-controller-manager:v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
kube</span>-scheduler:v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
kube</span>-proxy:v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
pause:</span><span style="color: rgba(128, 0, 128, 1)">3.1</span><span style="color: rgba(0, 0, 0, 1)">
etcd:</span><span style="color: rgba(128, 0, 128, 1)">3.3</span>.<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">
coredns:</span><span style="color: rgba(128, 0, 128, 1)">1.3</span>.<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
kubernetes</span>-dashboard-amd64:v1.<span style="color: rgba(128, 0, 128, 1)">10.1</span><span style="color: rgba(0, 0, 0, 1)">
heapster</span>-influxdb-amd64:v1.<span style="color: rgba(128, 0, 128, 1)">3.3</span><span style="color: rgba(0, 0, 0, 1)">
heapster</span>-amd64:v1.<span style="color: rgba(128, 0, 128, 1)">4.2</span><span style="color: rgba(0, 0, 0, 1)">
)
</span><span style="color: rgba(0, 0, 255, 1)">for</span> imageName <span style="color: rgba(0, 0, 255, 1)">in</span> ${images[@]} ; <span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
    docker pull registry.cn</span>-hangzhou.aliyuncs.com/google_containers/<span style="color: rgba(0, 0, 0, 1)">$imageName
    docker tag registry.cn</span>-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/<span style="color: rgba(0, 0, 0, 1)">$imageName
</span><span style="color: rgba(0, 0, 255, 1)">done</span></pre>
</div>
<p> 每个节点都要拉取。</p>
<h4>7.3&nbsp; 初始化</h4>
<p> 报错:前面已经修改了内核,但是没有生效,需要重启</p>
<div class="cnblogs_code">
<pre># kubeadm init --config kubeadm-<span style="color: rgba(0, 0, 0, 1)">init.yaml
Using Kubernetes version: v1.</span><span style="color: rgba(128, 0, 128, 1)">14.0</span><span style="color: rgba(0, 0, 0, 1)">
Running pre</span>-<span style="color: rgba(0, 0, 0, 1)">flight checks
error execution phase preflight: Some fatal errors occurred:
    : /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
If you know what you are doing, you can </span><span style="color: rgba(0, 0, 255, 1)">make</span> a check non-fatal with `--ignore-preflight-errors=...`</pre>
</div>
<p> 解决:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">echo</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1</span><span style="color: rgba(128, 0, 0, 1)">"</span> &gt; /proc/sys/net/bridge/bridge-nf-call-iptables</pre>
</div>
<p>或者重启服务器。</p>
<p> 重新初始化</p>
<div class="cnblogs_code">
<pre># kubeadm init --config kubeadm-<span style="color: rgba(0, 0, 0, 1)">init.yaml
Using Kubernetes version: v1.</span><span style="color: rgba(128, 0, 128, 1)">14.0</span><span style="color: rgba(0, 0, 0, 1)">
Running pre</span>-<span style="color: rgba(0, 0, 0, 1)">flight checks
Pulling images required </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> setting up a Kubernetes cluster
This might take a minute or two, depending on the speed of your internet connection
You can also perform this action </span><span style="color: rgba(0, 0, 255, 1)">in</span> beforehand using <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kubeadm config images pull</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
Writing kubelet environment <span style="color: rgba(0, 0, 255, 1)">file</span> with flags to <span style="color: rgba(0, 0, 255, 1)">file</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/var/lib/kubelet/kubeadm-flags.env</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Writing kubelet configuration to <span style="color: rgba(0, 0, 255, 1)">file</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/var/lib/kubelet/config.yaml</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Activating the kubelet service
Using certificateDir folder </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes/pki</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">etcd/ca</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">etcd/server</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
etcd</span>/server serving cert is signed <span style="color: rgba(0, 0, 255, 1)">for</span> DNS names and IPs [<span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.111</span> <span style="color: rgba(128, 0, 128, 1)">127.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span> ::<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">]
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">apiserver-etcd-client</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">etcd/peer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
etcd</span>/peer serving cert is signed <span style="color: rgba(0, 0, 255, 1)">for</span> DNS names and IPs [<span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.111</span> <span style="color: rgba(128, 0, 128, 1)">127.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span> ::<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">]
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">etcd/healthcheck-client</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ca</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">apiserver</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
apiserver serving cert is signed </span><span style="color: rgba(0, 0, 255, 1)">for</span> DNS names and IPs [<span style="color: rgba(128, 0, 128, 1)">10.245</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span> <span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.111</span> <span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.250</span><span style="color: rgba(0, 0, 0, 1)">]
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">apiserver-kubelet-client</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">front-proxy-ca</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">front-proxy-client</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sa</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> key and public key
Using kubeconfig folder </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
WARNING: port specified </span><span style="color: rgba(0, 0, 255, 1)">in</span> controlPlaneEndpoint overrides bindPort <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> the controlplane address
Writing </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin.conf</span><span style="color: rgba(128, 0, 0, 1)">"</span> kubeconfig <span style="color: rgba(0, 0, 255, 1)">file</span><span style="color: rgba(0, 0, 0, 1)">
WARNING: port specified </span><span style="color: rgba(0, 0, 255, 1)">in</span> controlPlaneEndpoint overrides bindPort <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> the controlplane address
Writing </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kubelet.conf</span><span style="color: rgba(128, 0, 0, 1)">"</span> kubeconfig <span style="color: rgba(0, 0, 255, 1)">file</span><span style="color: rgba(0, 0, 0, 1)">
WARNING: port specified </span><span style="color: rgba(0, 0, 255, 1)">in</span> controlPlaneEndpoint overrides bindPort <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> the controlplane address
Writing </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">controller-manager.conf</span><span style="color: rgba(128, 0, 0, 1)">"</span> kubeconfig <span style="color: rgba(0, 0, 255, 1)">file</span><span style="color: rgba(0, 0, 0, 1)">
WARNING: port specified </span><span style="color: rgba(0, 0, 255, 1)">in</span> controlPlaneEndpoint overrides bindPort <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> the controlplane address
Writing </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">scheduler.conf</span><span style="color: rgba(128, 0, 0, 1)">"</span> kubeconfig <span style="color: rgba(0, 0, 255, 1)">file</span><span style="color: rgba(0, 0, 0, 1)">
Using manifest folder <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes/manifests</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Creating static Pod manifest <span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kube-apiserver</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Creating static Pod manifest <span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kube-controller-manager</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Creating static Pod manifest <span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kube-scheduler</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Creating static Pod manifest </span><span style="color: rgba(0, 0, 255, 1)">for</span> local etcd <span style="color: rgba(0, 0, 255, 1)">in</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes/manifests</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
[</span><span style="color: rgba(0, 0, 255, 1)">wait</span>-control-plane] Waiting <span style="color: rgba(0, 0, 255, 1)">for</span> the kubelet to boot up the control plane as static Pods from directory <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes/manifests</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">. This can take up to 4m0s
All control plane components are healthy after </span><span style="color: rgba(128, 0, 128, 1)">13.502727</span><span style="color: rgba(0, 0, 0, 1)"> seconds
storing the configuration used <span style="color: rgba(0, 0, 255, 1)">in</span> ConfigMap <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kubeadm-config</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">in</span> the <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kube-system</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> Namespace
Creating a ConfigMap </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kubelet-config-1.14</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">in</span> namespace kube-system with the configuration <span style="color: rgba(0, 0, 255, 1)">for</span> the kubelets <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> the cluster
Skipping phase. Please see --experimental-upload-<span style="color: rgba(0, 0, 0, 1)">certs
Marking the node node-<span style="color: rgba(128, 0, 128, 1)">01</span> as control-plane by adding the label <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">node-role.kubernetes.io/master=''</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Marking the node node-<span style="color: rgba(128, 0, 128, 1)">01</span> as control-plane by adding the taints
Using token: abcdef.0123456789abcdef
Configuring bootstrap tokens, cluster-<span style="color: rgba(0, 0, 255, 1)">info</span><span style="color: rgba(0, 0, 0, 1)"> ConfigMap, RBAC Roles
configured RBAC rules to allow Node Bootstrap tokens to post CSRs <span style="color: rgba(0, 0, 255, 1)">in</span> order <span style="color: rgba(0, 0, 255, 1)">for</span> nodes to get <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> term certificate credentials
configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
configured RBAC rules to allow certificate rotation <span style="color: rgba(0, 0, 255, 1)">for</span> all node client certificates <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> the cluster
creating the <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">cluster-info</span><span style="color: rgba(128, 0, 0, 1)">"</span> ConfigMap <span style="color: rgba(0, 0, 255, 1)">in</span> the <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kube-public</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> namespace
Applied essential addon: CoreDNS
WARNING: port specified </span><span style="color: rgba(0, 0, 255, 1)">in</span> controlPlaneEndpoint overrides bindPort <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> the controlplane address
Applied essential addon: kube</span>-<span style="color: rgba(0, 0, 0, 1)">proxy

Your Kubernetes control</span>-plane has initialized successfully!<span style="color: rgba(0, 0, 0, 1)">

To start using your cluster, you need to run the following as a regular user:

</span><span style="color: rgba(0, 0, 255, 1)">mkdir</span> -p $HOME/<span style="color: rgba(0, 0, 0, 1)">.kube
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">cp</span> -i /etc/kubernetes/admin.conf $HOME/.kube/<span style="color: rgba(0, 0, 0, 1)">config
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">chown</span> $(<span style="color: rgba(0, 0, 255, 1)">id</span> -u):$(<span style="color: rgba(0, 0, 255, 1)">id</span> -g) $HOME/.kube/<span style="color: rgba(0, 0, 0, 1)">config

You should now deploy a pod network to the cluster.
Run </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kubectl apply -f .yaml</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> with one of the options listed at:
https:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">kubernetes.io/docs/concepts/cluster-administration/addons/</span>
<span style="color: rgba(0, 0, 0, 1)">
You can now </span><span style="color: rgba(0, 0, 255, 1)">join</span> any number of control-<span style="color: rgba(0, 0, 0, 1)">plane nodes by copying certificate authorities
and service account keys on each node and </span><span style="color: rgba(0, 0, 255, 1)">then</span><span style="color: rgba(0, 0, 0, 1)"> running the following as root:

kubeadm </span><span style="color: rgba(0, 0, 255, 1)">join</span> <span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.250</span>:<span style="color: rgba(128, 0, 128, 1)">8443</span> --<span style="color: rgba(0, 0, 0, 1)">token abcdef.0123456789abcdef \
    </span>--discovery-token-ca-cert-<span style="color: rgba(0, 0, 0, 1)">hash sha256:89accff8b4514d49be4b88906c50fdab4ba8a211788da7252b880c925af77671 \
    </span>--experimental-control-<span style="color: rgba(0, 0, 0, 1)">plane

Then you can </span><span style="color: rgba(0, 0, 255, 1)">join</span><span style="color: rgba(0, 0, 0, 1)"> any number of worker nodes by running the following on each as root:

kubeadm </span><span style="color: rgba(0, 0, 255, 1)">join</span> <span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.250</span>:<span style="color: rgba(128, 0, 128, 1)">8443</span> --<span style="color: rgba(0, 0, 0, 1)">token abcdef.0123456789abcdef \
    </span>--discovery-token-ca-cert-hash sha256:89accff8b4514d49be4b88906c50fdab4ba8a211788da7252b880c925af77671</pre>
</div>
<p>遇到报错:</p>
<div class="cnblogs_code">
<pre>[<span style="color: rgba(0, 0, 255, 1)">wait</span>-control-plane] Waiting <span style="color: rgba(0, 0, 255, 1)">for</span> the kubelet to boot up the control plane as static Pods from directory <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes/manifests</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">. This can take up to 4m0s
Initial timeout of 40s passed.


Unfortunately, an error has occurred:
    timed out waiting </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> the condition

This error is likely caused by:
    </span>-<span style="color: rgba(0, 0, 0, 1)"> The kubelet is not running
    </span>- The kubelet is unhealthy due to a misconfiguration of the node <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> some way (required cgroups disabled)

If you are on a systemd</span>-<span style="color: rgba(0, 0, 0, 1)">powered system, you can try to troubleshoot the error with the following commands:
    </span>- <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">systemctl status kubelet</span><span style="color: rgba(128, 0, 0, 1)">'</span>
    - <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">journalctl -xeu kubelet</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">

Additionally, a control plane component may have crashed or exited when started by the container runtime.
To troubleshoot, list all containers using your preferred container runtimes CLI, e.g. docker.
Here is one example how you may list all Kubernetes containers running </span><span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> docker:
    </span>- <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">docker ps -a | grep kube | grep -v pause</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    Once you have found the failing container, you can inspect its logs with:
    </span>- <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">docker logs CONTAINERID</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
error execution phase </span><span style="color: rgba(0, 0, 255, 1)">wait</span>-control-plane: couldn<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">t initialize a Kubernetes cluster</span></pre>
</div>
<p></p>
<div>报错分析: 这种情况较难分析,没有明确的报错信息,在系统日志中很难发现端疑,几种情况列举一下</div>
<div>&nbsp;1.拉取镜像失败,国内拉取google失败,可以换成阿里云,需要修改kubeadm-init.yaml ,imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers。</div>
<div>&nbsp;2.检查容器是否正常启动</div>
<div>&nbsp;3.配置的vip不能被访问,导致不能连接apiserver,检查防火墙配置。这也是导致我的初始化报错的原因。</div>
<div>&nbsp;4.如果失败,则清空初始化信息,执行kubeadm reset , 关闭docker,重启防火墙,如果etcd是外部的,将看到以前集群的状态,需要删除etcd数据,例如etcdctl del "" --prefix</div>
<div>
<div>&nbsp;</div>
<div>kubeadm init主要执行了以下操作:</div>
<div>:指定版本进行初始化操作</div>
<div> :初始化前的检查和下载所需要的Docker镜像文件</div>
<div> :生成kubelet的配置文件”/var/lib/kubelet/config.yaml”,没有这个文件kubelet无法启动,所以初始化之前的kubelet实际上启动失败。</div>
<div>:生成Kubernetes使用的证书,存放在/etc/kubernetes/pki目录中。</div>
<div> :生成 KubeConfig 文件,存放在/etc/kubernetes目录中,组件之间通信需要使用对应文件。</div>
<div>:使用/etc/kubernetes/manifest目录下的YAML文件,安装 Master 组件。</div>
<div>:使用/etc/kubernetes/manifest/etcd.yaml安装Etcd服务。</div>
<div>:等待control-plan部署的Master组件启动。</div>
<div>:检查Master组件服务状态。</div>
<div>:更新配置</div>
<div>:使用configMap配置kubelet。</div>
<div>:更新CNI信息到Node上,通过注释的方式记录。</div>
<div>:为当前节点打标签,打了角色Master,和不可调度标签,这样默认就不会使用Master节点来运行Pod。</div>
<div>:生成token记录下来,后边使用kubeadm join往集群中添加节点时会用到</div>
<div>:安装附加组件CoreDNS和kube-proxy&nbsp;</div>
</div>
<h4>7.4&nbsp; 为kubectl准备kubeconfig文件</h4>
<p></p>
<div>kubectl默认会在执行的用户家目录下面的.kube目录下寻找config文件。这里是将在初始化时步骤生成的admin.conf拷贝到.kube/config。</div>
<div>在该配置文件中,记录了API Server的访问地址,所以后面直接执行kubectl命令就可以正常连接到API Server中。&nbsp;</div>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">mkdir</span> -p $HOME/<span style="color: rgba(0, 0, 0, 1)">.kube
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">cp</span> -i /etc/kubernetes/admin.conf $HOME/.kube/<span style="color: rgba(0, 0, 0, 1)">config
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">chown</span> $(<span style="color: rgba(0, 0, 255, 1)">id</span> -u):$(<span style="color: rgba(0, 0, 255, 1)">id</span> -g) $HOME/.kube/config</pre>
</div>
<h4>7.5&nbsp; 查看组件状态</h4>
<div class="cnblogs_code">
<pre># kubectl get cs
NAME               STATUS    MESSAGE             ERROR
controller</span>-<span style="color: rgba(0, 0, 0, 1)">manager   Healthy   ok
scheduler            Healthy   ok
etcd</span>-<span style="color: rgba(128, 0, 128, 1)">0</span>               Healthy   {<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">health</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">true</span><span style="color: rgba(128, 0, 0, 1)">"</span>}</pre>
</div>
<div class="cnblogs_code">
<pre># kubectl get node
NAME      STATUS   ROLES    AGE   VERSION
node</span>-<span style="color: rgba(128, 0, 128, 1)">01</span>   NotReady   master   37m   v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span></pre>
</div>
<p></p>
<div>目前只有一个节点,角色是master,状态是NotReady。是因为没有网络插件的原因。</div>
<h4>7.6 添加其他master节点</h4>
<div> 将node-01将证书文件拷贝至其他master节点</div>
<div>
<div class="cnblogs_code">
<pre>USER=<span style="color: rgba(0, 0, 0, 1)">root
CONTROL_PLANE_IPS</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">node-02 node-03</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> host <span style="color: rgba(0, 0, 255, 1)">in</span> ${CONTROL_PLANE_IPS}; <span style="color: rgba(0, 0, 255, 1)">do</span>
    <span style="color: rgba(0, 0, 255, 1)">ssh</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">${USER}</span><span style="color: rgba(128, 0, 0, 1)">"</span>@$host <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mkdir -p /etc/kubernetes/pki/etcd</span><span style="color: rgba(128, 0, 0, 1)">"</span>
    <span style="color: rgba(0, 0, 255, 1)">scp</span> /etc/kubernetes/pki/ca.* <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">${USER}</span><span style="color: rgba(128, 0, 0, 1)">"</span>@$host:/etc/kubernetes/pki/
    <span style="color: rgba(0, 0, 255, 1)">scp</span> /etc/kubernetes/pki/sa.* <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">${USER}</span><span style="color: rgba(128, 0, 0, 1)">"</span>@$host:/etc/kubernetes/pki/
    <span style="color: rgba(0, 0, 255, 1)">scp</span> /etc/kubernetes/pki/front-proxy-ca.* <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">${USER}</span><span style="color: rgba(128, 0, 0, 1)">"</span>@$host:/etc/kubernetes/pki/
    <span style="color: rgba(0, 0, 255, 1)">scp</span> /etc/kubernetes/pki/etcd/ca.* <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">${USER}</span><span style="color: rgba(128, 0, 0, 1)">"</span>@$host:/etc/kubernetes/pki/etcd/
    <span style="color: rgba(0, 0, 255, 1)">scp</span> /etc/kubernetes/admin.conf <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">${USER}</span><span style="color: rgba(128, 0, 0, 1)">"</span>@$host:/etc/kubernetes/
<span style="color: rgba(0, 0, 255, 1)">done</span></pre>
</div>
<p></p>
<div>在其他master执行,注意--experimental-control-plane参数,下面具体命令要根据kubeadm输出</div>
<div>
<div class="cnblogs_code">
<pre># kubeadm <span style="color: rgba(0, 0, 255, 1)">join</span> <span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.250</span>:<span style="color: rgba(128, 0, 128, 1)">8443</span> --<span style="color: rgba(0, 0, 0, 1)">token abcdef.0123456789abcdef \
    </span>--discovery-token-ca-cert-<span style="color: rgba(0, 0, 0, 1)">hash sha256:30d13676940237d9c4f0c5c05e67cbeb58cc031f97e3515df27174e6cb777f60 \
    </span>--experimental-control-<span style="color: rgba(0, 0, 0, 1)">plane
Running pre</span>-<span style="color: rgba(0, 0, 0, 1)">flight checks
Reading configuration from the cluster...
FYI: You can look at this config </span><span style="color: rgba(0, 0, 255, 1)">file</span> with <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kubectl -n kube-system get cm kubeadm-config -oyaml</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
Running pre</span>-<span style="color: rgba(0, 0, 0, 1)">flight checks before initializing the new control plane instance
Pulling images required </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> setting up a Kubernetes cluster
This might take a minute or two, depending on the speed of your internet connection
You can also perform this action </span><span style="color: rgba(0, 0, 255, 1)">in</span> beforehand using <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kubeadm config images pull</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
Using certificateDir folder </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes/pki</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">front-proxy-client</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">etcd/server</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
etcd</span>/server serving cert is signed <span style="color: rgba(0, 0, 255, 1)">for</span> DNS names and IPs [<span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.112</span> <span style="color: rgba(128, 0, 128, 1)">127.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span> ::<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">]
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">etcd/healthcheck-client</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">apiserver-etcd-client</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">etcd/peer</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
etcd</span>/peer serving cert is signed <span style="color: rgba(0, 0, 255, 1)">for</span> DNS names and IPs [<span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.112</span> <span style="color: rgba(128, 0, 128, 1)">127.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span> ::<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">]
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">apiserver</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
apiserver serving cert is signed </span><span style="color: rgba(0, 0, 255, 1)">for</span> DNS names and IPs [<span style="color: rgba(128, 0, 128, 1)">10.245</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span> <span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.112</span> <span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.250</span><span style="color: rgba(0, 0, 0, 1)">]
Generating </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">apiserver-kubelet-client</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> certificate and key
Valid certificates and keys now exist </span><span style="color: rgba(0, 0, 255, 1)">in</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes/pki</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Using the existing </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sa</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> key
Generating kubeconfig files
Using kubeconfig folder </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
WARNING: port specified </span><span style="color: rgba(0, 0, 255, 1)">in</span> controlPlaneEndpoint overrides bindPort <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> the controlplane address
Using existing kubeconfig </span><span style="color: rgba(0, 0, 255, 1)">file</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes/admin.conf</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Writing </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">controller-manager.conf</span><span style="color: rgba(128, 0, 0, 1)">"</span> kubeconfig <span style="color: rgba(0, 0, 255, 1)">file</span><span style="color: rgba(0, 0, 0, 1)">
Writing </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">scheduler.conf</span><span style="color: rgba(128, 0, 0, 1)">"</span> kubeconfig <span style="color: rgba(0, 0, 255, 1)">file</span><span style="color: rgba(0, 0, 0, 1)">
Using manifest folder <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes/manifests</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Creating static Pod manifest <span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kube-apiserver</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Creating static Pod manifest <span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kube-controller-manager</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Creating static Pod manifest <span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kube-scheduler</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Checking that the etcd cluster is healthy
Downloading configuration <span style="color: rgba(0, 0, 255, 1)">for</span> the kubelet from the <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kubelet-config-1.14</span><span style="color: rgba(128, 0, 0, 1)">"</span> ConfigMap <span style="color: rgba(0, 0, 255, 1)">in</span> the kube-<span style="color: rgba(0, 0, 0, 1)">system namespace
Writing kubelet configuration to <span style="color: rgba(0, 0, 255, 1)">file</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/var/lib/kubelet/config.yaml</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Writing kubelet environment <span style="color: rgba(0, 0, 255, 1)">file</span> with flags to <span style="color: rgba(0, 0, 255, 1)">file</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/var/lib/kubelet/kubeadm-flags.env</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Activating the kubelet service
Waiting <span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> the kubelet to perform the TLS Bootstrap...
Announced new etcd member joining to the existing etcd cluster
Wrote Static Pod manifest </span><span style="color: rgba(0, 0, 255, 1)">for</span> a local etcd member to <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kubernetes/manifests/etcd.yaml</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Waiting </span><span style="color: rgba(0, 0, 255, 1)">for</span> the new etcd member to <span style="color: rgba(0, 0, 255, 1)">join</span><span style="color: rgba(0, 0, 0, 1)"> the cluster. This can take up to 40s
storing the configuration used <span style="color: rgba(0, 0, 255, 1)">in</span> ConfigMap <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kubeadm-config</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">in</span> the <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kube-system</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> Namespace
Marking the node node-<span style="color: rgba(128, 0, 128, 1)">02</span> as control-plane by adding the label <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">node-role.kubernetes.io/master=''</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Marking the node node-<span style="color: rgba(128, 0, 128, 1)">02</span> as control-plane by adding the taints

This node has joined the cluster and a new control plane instance was created:

</span>*<span style="color: rgba(0, 0, 0, 1)"> Certificate signing request was sent to apiserver and approval was received.
</span>*<span style="color: rgba(0, 0, 0, 1)"> The Kubelet was informed of the new secure connection details.
</span>*<span style="color: rgba(0, 0, 0, 1)"> Control plane (master) label and taint were applied to the new node.
</span>*<span style="color: rgba(0, 0, 0, 1)"> The Kubernetes control plane instances scaled up.
</span>* A new etcd member was added to the local/<span style="color: rgba(0, 0, 0, 1)">stacked etcd cluster.

To start administering your cluster from this node, you need to run the following as a regular user:

    </span><span style="color: rgba(0, 0, 255, 1)">mkdir</span> -p $HOME/<span style="color: rgba(0, 0, 0, 1)">.kube
    </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">cp</span> -i /etc/kubernetes/admin.conf $HOME/.kube/<span style="color: rgba(0, 0, 0, 1)">config
    </span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">chown</span> $(<span style="color: rgba(0, 0, 255, 1)">id</span> -u):$(<span style="color: rgba(0, 0, 255, 1)">id</span> -g) $HOME/.kube/<span style="color: rgba(0, 0, 0, 1)">config

Run </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">kubectl get nodes</span><span style="color: rgba(128, 0, 0, 1)">'</span> to see this node <span style="color: rgba(0, 0, 255, 1)">join</span> the cluster.</pre>
</div>
<p> 注意:token有效期是有限的,如果旧的token过期,可以使用kubeadm token create --print-join-command重新创建一条token。</p>
<p></p>
<div>为kubectl准备kubeconfig文件</div>
<div>kubectl默认会在执行的用户家目录下面的.kube目录下寻找config文件。这里是将在初始化时步骤生成的admin.conf拷贝到.kube/config。</div>
<div>在该配置文件中,记录了API Server的访问地址,所以后面直接执行kubectl命令就可以正常连接到API Server中。</div>
</div>
</div>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">mkdir</span> -p $HOME/<span style="color: rgba(0, 0, 0, 1)">.kube
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">cp</span> -i /etc/kubernetes/admin.conf $HOME/.kube/<span style="color: rgba(0, 0, 0, 1)">config
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">chown</span> $(<span style="color: rgba(0, 0, 255, 1)">id</span> -u):$(<span style="color: rgba(0, 0, 255, 1)">id</span> -g) $HOME/.kube/config</pre>
</div>
<div class="cnblogs_code">
<pre># kubectl get nodes
NAME      STATUS   ROLES    AGE   VERSION
node</span>-<span style="color: rgba(128, 0, 128, 1)">01</span>   NotReady   master   90m   v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
node</span>-<span style="color: rgba(128, 0, 128, 1)">02</span>   NotReady   master   36s   v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span></pre>
</div>
<h4>7.7 部署node节点</h4>
<p> 在node-04、node-05、node-06执行,注意没有--experimental-control-plane参数,下面具体命令要根据kubeadm输出</p>
<div class="cnblogs_code">
<pre>kubeadm <span style="color: rgba(0, 0, 255, 1)">join</span> <span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">8.250</span>:<span style="color: rgba(128, 0, 128, 1)">8443</span> --token abcdef.0123456789abcdef   --discovery-token-ca-cert-hash sha256:89accff8b4514d49be4b88906c50fdab4ba8a211788da7252b880c925af77671</pre>
</div>
<h4>7.8 部署网络插件flannel</h4>
<p> Master节点NotReady的原因就是因为没有使用任何的网络插件,此时Node和Master的连接还不正常。目前最流行的Kubernetes网络插件有Flannel、Calico、Canal、Weave这里选择使用flannel。</p>
<div class="cnblogs_code">
<pre># kubectl apply -f https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml</span></pre>
</div>
<p> 这将在每个节点上运行flannel的daemonset</p>
<h4>7.9&nbsp; 查看节点状态,需要几秒钟才会变化</h4>
<div class="cnblogs_code">
<pre># kubectl get node
NAME      STATUS   ROLES    AGE    VERSION
node</span>-<span style="color: rgba(128, 0, 128, 1)">01</span>   Ready    master   163m   v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
node</span>-<span style="color: rgba(128, 0, 128, 1)">02</span>   Ready    master   74m    v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
node</span>-<span style="color: rgba(128, 0, 128, 1)">03</span>   Ready    master   68m    v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
node</span>-<span style="color: rgba(128, 0, 128, 1)">04</span>   Ready    &lt;none&gt;   66m    v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
node</span>-<span style="color: rgba(128, 0, 128, 1)">05</span>   Ready    &lt;none&gt;   40m    v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span><span style="color: rgba(0, 0, 0, 1)">
node</span>-<span style="color: rgba(128, 0, 128, 1)">06</span>   Ready    &lt;none&gt;   62m    v1.<span style="color: rgba(128, 0, 128, 1)">14.1</span></pre>
</div>
<p> 查看pod</p>
<div class="cnblogs_code">
<pre># kubectl get pod -n kube-<span style="color: rgba(0, 0, 0, 1)">system
NAME                              READY   STATUS            RESTARTS   AGE
coredns</span>-fb8b8dccf-5hwwz         <span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   ContainerCreating   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          165m
coredns</span>-fb8b8dccf-r6z4q         <span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   ContainerCreating   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          165m
etcd</span>-node-<span style="color: rgba(128, 0, 128, 1)">01</span>                      <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          163m
etcd</span>-node-<span style="color: rgba(128, 0, 128, 1)">02</span>                      <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          75m
etcd</span>-node-<span style="color: rgba(128, 0, 128, 1)">03</span>                      <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          70m
kube</span>-apiserver-node-<span style="color: rgba(128, 0, 128, 1)">01</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          163m
kube</span>-apiserver-node-<span style="color: rgba(128, 0, 128, 1)">02</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          75m
kube</span>-apiserver-node-<span style="color: rgba(128, 0, 128, 1)">03</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          70m
kube</span>-controller-manager-node-<span style="color: rgba(128, 0, 128, 1)">01</span>   <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">          163m
kube</span>-controller-manager-node-<span style="color: rgba(128, 0, 128, 1)">02</span>   <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          75m
kube</span>-controller-manager-node-<span style="color: rgba(128, 0, 128, 1)">03</span>   <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          70m
kube</span>-flannel-ds-amd64-2p8cd       <span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   CrashLoopBackOff    <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">          110s
kube</span>-flannel-ds-amd64-9rjm9       <span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   CrashLoopBackOff    <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">          110s
kube</span>-flannel-ds-amd64-bvhdn       <span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Error               <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">          110s
kube</span>-flannel-ds-amd64-l7bzb       <span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   CrashLoopBackOff    <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">          110s
kube</span>-flannel-ds-amd64-qb5h6       <span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   CrashLoopBackOff    <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">          110s
kube</span>-flannel-ds-amd64-w2jvq       <span style="color: rgba(128, 0, 128, 1)">0</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Error               <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">          110s
kube</span>-proxy-57vgk                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          63m
kube</span>-proxy-gkz7g                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          70m
kube</span>-proxy-h2kcg                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          67m
kube</span>-proxy-lc5bj                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          41m
kube</span>-proxy-rmxjs                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          165m
kube</span>-proxy-wlfrx                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          75m
kube</span>-scheduler-node-<span style="color: rgba(128, 0, 128, 1)">01</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">          164m
kube</span>-scheduler-node-<span style="color: rgba(128, 0, 128, 1)">02</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          75m
kube</span>-scheduler-node-<span style="color: rgba(128, 0, 128, 1)">03</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running             <span style="color: rgba(128, 0, 128, 1)">0</span>          70m</pre>
</div>
<p></p>
<div>注意上面的报错信息,kube-flannel-ds 在报错,原因是kubeadm-init.yaml中没有配置networking.podSubnet,重新配置需要所有节点执行kubeadm rest,再执行kubeadm init,重新导证书。</div>
<div> 修复后检查</div>
<div>
<div class="cnblogs_code">
<pre># kubectl get pod -n kube-<span style="color: rgba(0, 0, 0, 1)">system
NAME                              READY   STATUS    RESTARTS   AGE
coredns</span>-fb8b8dccf-6qsvj         <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          23m
coredns</span>-fb8b8dccf-tvm9c         <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          23m
etcd</span>-node-<span style="color: rgba(128, 0, 128, 1)">01</span>                      <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          22m
etcd</span>-node-<span style="color: rgba(128, 0, 128, 1)">02</span>                      <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          10m
etcd</span>-node-<span style="color: rgba(128, 0, 128, 1)">03</span>                      <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          10m
kube</span>-apiserver-node-<span style="color: rgba(128, 0, 128, 1)">01</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          22m
kube</span>-apiserver-node-<span style="color: rgba(128, 0, 128, 1)">02</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          10m
kube</span>-apiserver-node-<span style="color: rgba(128, 0, 128, 1)">03</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          8m55s
kube</span>-controller-manager-node-<span style="color: rgba(128, 0, 128, 1)">01</span>   <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">          22m
kube</span>-controller-manager-node-<span style="color: rgba(128, 0, 128, 1)">02</span>   <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          10m
kube</span>-controller-manager-node-<span style="color: rgba(128, 0, 128, 1)">03</span>   <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          9m5s
kube</span>-flannel-ds-amd64-49f8b       <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          6m41s
kube</span>-flannel-ds-amd64-8vhc8       <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          6m41s
kube</span>-flannel-ds-amd64-fhh85       <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          6m41s
kube</span>-flannel-ds-amd64-hg27k       <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          6m41s
kube</span>-flannel-ds-amd64-m6wxf       <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          6m41s
kube</span>-flannel-ds-amd64-qqpnp       <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          6m41s
kube</span>-proxy-6jhqr                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          23m
kube</span>-proxy-frsd8                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          7m9s
kube</span>-proxy-fstbk                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          7m20s
kube</span>-proxy-pk9qf                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          10m
kube</span>-proxy-pshmk                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          10m
kube</span>-proxy-tpbcm                  <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          7m2s
kube</span>-scheduler-node-<span style="color: rgba(128, 0, 128, 1)">01</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">          22m
kube</span>-scheduler-node-<span style="color: rgba(128, 0, 128, 1)">02</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">          10m
kube</span>-scheduler-node-<span style="color: rgba(128, 0, 128, 1)">03</span>            <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">1</span>   Running   <span style="color: rgba(128, 0, 128, 1)">0</span>          9m</pre>
</div>
<p>至此使用kubeadm部署k8s已经完成。</p>
<hr>
<p>&nbsp;</p>
<h3>简单介绍calico网络插件</h3>
<div class="cnblogs_code">
<pre>kubectl apply -f https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml</span>
<span style="color: rgba(0, 0, 255, 1)">wget</span> https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml</span></pre>
</div>
<p> 此处需要修改calico.yaml,该文件里面指定了pod使用的网络为 "192.168.0.0/16” ,要保证 kubeadm-init.yaml &nbsp;和&nbsp;calico.yaml&nbsp;中的配置相同。本文中kubeadm-init.yaml 中配置了&nbsp;podSubnet: "10.244.0.0/16”,因此需要修改calico.yaml。</p>
<p> 然后执行&nbsp;</p>
<div class="cnblogs_code">
<pre>kubectl apply -f calico.yaml</pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">网络插件安装完成后,可以通过检查coredns pod的运行状态来判断网络插件是否正常运行:
kubectl get pods </span>--all-namespaces<br></pre>
<div>NAMESPACE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;READY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STATUS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RESTARTS&nbsp;&nbsp;&nbsp;AGE</div>
<div>kube-system&nbsp;&nbsp;&nbsp;calico-node-lxz4c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0/2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContainerCreating&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4m</div>
<div>kube-system&nbsp;&nbsp;&nbsp;coredns-78fcdf6894-7xwn7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0/1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pending&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5m</div>
<div>kube-system&nbsp;&nbsp;&nbsp;coredns-78fcdf6894-c2pq8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0/1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pending&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5m</div>
<div>kube-system&nbsp;&nbsp;&nbsp;etcd-iz948lz3o7sz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1/1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Running&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5m</div>
<div>kube-system&nbsp;&nbsp;&nbsp;kube-apiserver-iz948lz3o7sz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1/1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Running&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5m</div>
<div>kube-system&nbsp;&nbsp;&nbsp;kube-controller-manager-iz948lz3o7sz&nbsp;&nbsp;&nbsp;1/1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Running&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5m</div>
<div>kube-system&nbsp;&nbsp;&nbsp;kube-proxy-wcj2r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1/1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Running&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5m</div>
<div>kube-system&nbsp;&nbsp;&nbsp;kube-scheduler-iz948lz3o7sz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1/1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Running&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4m</div>
<div>&nbsp;</div>
<div> # 注:coredns 启动需要一定时间,刚开始是Pending</div>
</div>
<p></p>
<div>等待coredns pod的状态变成Running。</div>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/cptao/p/10912644.html
頁: [1]
查看完整版本: kubernetes之kubeadm 安装kubernetes 高可用集群