打赏 jQuery火箭图标返回顶部代码</h3> <div> <div id="cnblogs_post_body" class="blogpost-body"> <h2 id="vbGwA" data-lake-id="c1ed7e8fe52d48fb0e7c5beca455f426" data-wording="true"><span style="font-size: 14px; font-family: "Microsoft YaHei"">1 节点规划信息</span></h2> <div id="2Oin8" class="lake-card-margin" data-card-type="block" data-lake-card="table" data-card-value="data:%7B%22rows%22%3A6%2C%22cols%22%3A3%2C%22html%22%3A%22%3Ctable%20class%3D%5C%22lake-table%5C%22%20style%3D%5C%22width%3A%20720px%3B%5C%22%3E%3Ccolgroup%3E%3Ccol%20width%3D%5C%22240%5C%22%20span%3D%5C%221%5C%22%20%2F%3E%3Ccol%20width%3D%5C%22240%5C%22%20span%3D%5C%221%5C%22%20%2F%3E%3Ccol%20width%3D%5C%22240%5C%22%20span%3D%5C%221%5C%22%20%2F%3E%3C%2Fcolgroup%3E%3Ctbody%3E%3Ctr%20style%3D%5C%22height%3A%2033px%3B%5C%22%3E%3Ctd%3E%3Cp%20data-lake-id%3D%5C%229c16f8382a93d8ac2bb114322337244e_p_0%5C%22%3E%E8%A7%92%E8%89%B2%3C%2Fp%3E%3C%2Ftd%3E%3Ctd%3E%3Cp%20data-lake-id%3D%5C%221ac0cdd4e11430c3acfd6fb3b0f29f3c_p_0%5C%22%3EIP%E5%9C%B0%E5%9D%80%3C%2Fp%3E%3C%2Ftd%3E%3Ctd%20rowspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cp%20data-lake-id%3D%5C%22a20d224c568e48b9d67847a2c66a8c01_p_0%5C%22%3E%E7%B3%BB%E7%BB%9F%3C%2Fp%3E%3C%2Ftd%3E%3C%2Ftr%3E%3Ctr%20style%3D%5C%22height%3A%2033px%3B%5C%22%3E%3Ctd%3E%3Cp%20data-lake-id%3D%5C%22ad338f3e212f96b54a18525331b481ae%5C%22%3E%3Cspan%20style%3D%5C%22color%3A%20%23333333%3B%5C%22%3Ek8s-master01%3C%2Fspan%3E%3C%2Fp%3E%3C%2Ftd%3E%3Ctd%3E%3Cp%20data-lake-id%3D%5C%22f5288918051daac58a0cdf74b1d666a8_p_0%5C%22%3E10.211.55.3%3C%2Fp%3E%3C%2Ftd%3E%3Ctd%20rowspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cp%20data-lake-id%3D%5C%22a20d224c568e48b9d67847a2c66a8c01_p_0%5C%22%3E%3Cstrong%3ECentOS7.6.1810%3C%2Fstrong%3E%3C%2Fp%3E%3C%2Ftd%3E%3C%2Ftr%3E%3Ctr%20style%3D%5C%22height%3A%2033px%3B%5C%22%3E%3Ctd%20rowspan%3D%5C%221%5C%22%20colspan%3D%5C%221%5C%22%3E%3Cspan%20style%3D%5C%22color%3A%20%23333333%3B%20background-color%3A%20%23FFFFFF%3B%5C%22%3Ek8s-master02%3C%2Fspan%3E%3C%2Ftd%3E%3Ctd%20rowspan%3D%5C%221%5C%22%20colspan%3D%5C%221%5C%22%3E%3Cspan%20style%3D%5C%22color%3A%20%23262626%3B%5C%22%3E10.211.55.5%3C%2Fspan%3E%3C%2Ftd%3E%3Ctd%20rowspan%3D%5C%221%5C%22%20colspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cstrong%3ECentOS7.6.1810%3C%2Fstrong%3E%3C%2Ftd%3E%3C%2Ftr%3E%3Ctr%20style%3D%5C%22height%3A%2033px%3B%5C%22%3E%3Ctd%20colspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cp%20data-lake-id%3D%5C%22a20d224c568e48b9d67847a2c66a8c01_p_0%5C%22%3E%3Cspan%20style%3D%5C%22color%3A%20%23333333%3B%5C%22%3Ek8s-master03%3C%2Fspan%3E%3C%2Fp%3E%3C%2Ftd%3E%3Ctd%20colspan%3D%5C%221%5C%22%20rowspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cspan%20style%3D%5C%22color%3A%20%23262626%3B%5C%22%3E10.211.55.6%3C%2Fspan%3E%3C%2Ftd%3E%3Ctd%20rowspan%3D%5C%221%5C%22%20colspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cstrong%3ECentOS7.6.1810%3C%2Fstrong%3E%3C%2Ftd%3E%3C%2Ftr%3E%3Ctr%20style%3D%5C%22height%3A%2033px%3B%5C%22%3E%3Ctd%20colspan%3D%5C%221%5C%22%20rowspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cspan%20style%3D%5C%22color%3A%20%23333333%3B%20background-color%3A%20%23FFFFFF%3B%5C%22%3Ek8s-node01%3C%2Fspan%3E%3C%2Ftd%3E%3Ctd%20colspan%3D%5C%221%5C%22%20rowspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cspan%20style%3D%5C%22color%3A%20%23262626%3B%5C%22%3E10.211.55.7%3C%2Fspan%3E%3C%2Ftd%3E%3Ctd%20rowspan%3D%5C%221%5C%22%20colspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cstrong%3ECentOS7.6.1810%3C%2Fstrong%3E%3C%2Ftd%3E%3C%2Ftr%3E%3Ctr%20style%3D%5C%22height%3A%2033px%3B%5C%22%3E%3Ctd%20colspan%3D%5C%221%5C%22%20rowspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cspan%20style%3D%5C%22color%3A%20%23333333%3B%20background-color%3A%20%23FFFFFF%3B%5C%22%3Ek8s-lb%3C%2Fspan%3E%3C%2Ftd%3E%3Ctd%20colspan%3D%5C%221%5C%22%20rowspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cspan%20style%3D%5C%22color%3A%20%23262626%3B%5C%22%3E10.211.55.10%3C%2Fspan%3E%3C%2Ftd%3E%3Ctd%20rowspan%3D%5C%221%5C%22%20colspan%3D%5C%221%5C%22%20style%3D%5C%22vertical-align%3A%20top%3B%20background-color%3A%20%23FFFFFF%3B%20color%3A%20%23262626%3B%5C%22%3E%3Cstrong%3ECentOS7.6.1810%3C%2Fstrong%3E%3C%2Ftd%3E%3C%2Ftr%3E%3C%2Ftbody%3E%3C%2Ftable%3E%22%2C%22margin%22%3Atrue%2C%22id%22%3A%222Oin8%22%7D"> <table class="lake-table"><colgroup><col span="1" width="240"><col span="1" width="240"><col span="1" width="240"></colgroup> <tbody> <tr> <td> <p data-lake-id="9c16f8382a93d8ac2bb114322337244e_p_0"><span style="font-size: 14px; font-family: "Microsoft YaHei"">角色</span></p> </td> <td> <p data-lake-id="1ac0cdd4e11430c3acfd6fb3b0f29f3c_p_0"><span style="font-size: 14px; font-family: "Microsoft YaHei"">IP地址</span></p> </td> <td rowspan="1"> <p data-lake-id="a20d224c568e48b9d67847a2c66a8c01_p_0"><span style="font-size: 14px; font-family: "Microsoft YaHei"">系统</span></p> </td> </tr> <tr> <td> <p data-lake-id="ad338f3e212f96b54a18525331b481ae"><span style="font-size: 14px; font-family: "Microsoft YaHei"">k8s-master01</span></p> </td> <td> <p data-lake-id="f5288918051daac58a0cdf74b1d666a8_p_0"><span style="font-size: 14px; font-family: "Microsoft YaHei"">192.168.226.20</span></p> </td> <td rowspan="1"> <p data-lake-id="a20d224c568e48b9d67847a2c66a8c01_p_0"><span style="font-size: 14px; font-family: "Microsoft YaHei""><strong>CentOS7.8.2003</strong></span></p> </td> </tr> <tr> <td rowspan="1" colspan="1"><span style="font-size: 14px; font-family: "Microsoft YaHei"">k8s-master02</span></td> <td rowspan="1" colspan="1"><span style="font-size: 14px; font-family: "Microsoft YaHei"">192.168.226.21</span></td> <td rowspan="1" colspan="1"><span style="font-size: 14px; font-family: "Microsoft YaHei""><strong>CentOS7.8.2003</strong></span></td> </tr> <tr> <td colspan="1"> <p data-lake-id="a20d224c568e48b9d67847a2c66a8c01_p_0"><span style="font-size: 14px; font-family: "Microsoft YaHei"">k8s-master03</span></p> </td> <td rowspan="1" colspan="1"><span style="font-size: 14px; font-family: "Microsoft YaHei"">192.168.226.22</span></td> <td rowspan="1" colspan="1"><span style="font-size: 14px; font-family: "Microsoft YaHei""><strong>CentOS7.8.2003</strong></span></td> </tr> <tr> <td rowspan="1" colspan="1"><span style="font-size: 14px; font-family: "Microsoft YaHei"">k8s-node01</span></td> <td rowspan="1" colspan="1"><span style="font-size: 14px; font-family: "Microsoft YaHei"">192.168.226.23</span></td> <td rowspan="1" colspan="1"><span style="font-size: 14px; font-family: "Microsoft YaHei""><strong>CentOS7.8.2003</strong></span></td> </tr> <tr> <td rowspan="1" colspan="1"><span style="font-size: 14px; font-family: "Microsoft YaHei"">k8s-lb</span></td> <td rowspan="1" colspan="1"><span style="font-size: 14px; font-family: "Microsoft YaHei"">192.168.226.24</span></td> <td rowspan="1" colspan="1"><span style="font-size: 14px; font-family: "Microsoft YaHei""><strong>CentOS7.8.2003</strong></span></td> </tr> </tbody> </table> <h2 id="VHPTR" data-lake-id="edb6f6b72e8379ba6653f744b50ed29c" data-wording="true"><span style="font-size: 14px; font-family: "Microsoft YaHei"">2 环境初始化</span></h2> <p data-lake-id="690002e61f94a60ee61fed2424d053e2" data-wording="true"><span class="lake-fontsize-1515" style="font-size: 14px; font-family: "Microsoft YaHei"">1)配置主机名,以k8s-master01为例(需要依次根据节点规划角色修改主机名)</span></p> <p data-lake-id="aa9b1a886fcedf121eef55c79b57bc17" data-wording="true"><span style="font-size: 14px; font-family: "Microsoft YaHei"">k8s-lb不需要设置</span></p> <div id="D0FCo" class="lake-card-margin" data-card-type="block" data-lake-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22plain%22%2C%22code%22%3A%22%5Broot%40localhost%20~%5D%23%20hostnamectl%20set-hostname%20k8s-master01%22%2C%22margin%22%3Atrue%2C%22id%22%3A%22D0FCo%22%7D" data-language="plain"> <div class="lake-codeblock-content"> <div class="CodeMirror-sizer"> <div class="cnblogs_code"> <pre><span style="font-size: 14px; font-family: "Microsoft YaHei"">[root@localhost ~]# hostnamectl <span style="color: rgba(0, 0, 255, 1)">set</span>-hostname k8s-master01</span></pre> </div> <p><span style="font-size: 14px; font-family: "Microsoft YaHei"">2)<span class="lake-fontsize-1515">配置主机hosts映射</span></span></p> <div class="cnblogs_code"> <pre><span style="font-size: 14px; font-family: "Microsoft YaHei"">cat <<EOF > /etc/<span style="color: rgba(0, 0, 0, 1)">hosts </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(0, 0, 0, 1)"> localhost localhost.localdomain localhost4 localhost4.localdomain4 ::</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> localhost localhost.localdomain localhost6 localhost6.localdomain6 </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">226.20</span> k8s-<span style="color: rgba(0, 0, 0, 1)">master01 </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">226.21</span> k8s-<span style="color: rgba(0, 0, 0, 1)">master02 </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">226.22</span> k8s-<span style="color: rgba(0, 0, 0, 1)">master03 </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">226.23</span> k8s-<span style="color: rgba(0, 0, 0, 1)">node01 </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">226.24</span> k8s-<span style="color: rgba(0, 0, 0, 1)">lb EOF</span></span></pre> </div> <p><span style="font-size: 14px; font-family: "Microsoft YaHei"">3)配置密钥</span></p> <div class="cnblogs_code"> <pre><span style="font-size: 14px; font-family: "Microsoft YaHei"">ssh-keygen -t rsa -P <span style="color: rgba(128, 0, 0, 1)">""</span> -f /root/.ssh/<span style="color: rgba(0, 0, 0, 1)">id_rsa yum install </span>-<span style="color: rgba(0, 0, 0, 1)">y expect </span><span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span> k8s-master01 k8s-master02 k8s-master03 k8s-node01 k8s-lb;<span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)"> expect </span>-c <span style="color: rgba(128, 0, 0, 1)">" </span>spawn ssh-copy-id -i /root/.ssh/<span style="color: rgba(0, 0, 0, 1)">id_rsa.pub root@$i expect { </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">*yes/no*" {send "yes "; exp_continue}</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">*password*" {send "root "; exp_continue}</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">*Password*" {send "root ";}</span> } <span style="color: rgba(128, 0, 0, 1)">" </span><span style="color: rgba(0, 0, 0, 1)">done </span><span style="color: rgba(0, 0, 255, 1)">for</span> host <span style="color: rgba(0, 0, 255, 1)">in</span> k8s-master01 k8s-master02 k8s-master03 k8s-node01 k8s-lb;<span style="color: rgba(0, 0, 255, 1)">do</span> ping -c <span style="color: rgba(128, 0, 128, 1)">1</span> $host;done</span></pre> </div> <p><span style="font-size: 14px; font-family: "Microsoft YaHei"">4)关闭防火墙,selinux和swap分区</span></p> <div class="cnblogs_code"> <pre><span style="font-size: 14px; font-family: "Microsoft YaHei""><span style="color: rgba(0, 0, 0, 1)">systemctl stop firewalld systemctl disable firewalld setenforce </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> sed </span>-i <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">s/^SELINUX=.*/SELINUX=disabled/g</span><span style="color: rgba(128, 0, 0, 1)">"</span> /etc/selinux/<span style="color: rgba(0, 0, 0, 1)">config swapoff </span>-<span style="color: rgba(0, 0, 0, 1)">a sed </span>-i <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/ swap / s/^(.*)$/#1/g</span><span style="color: rgba(128, 0, 0, 1)">'</span> /etc/fstab</span></pre> </div> <p><span style="font-size: 14px; font-family: "Microsoft YaHei"">5)时间同步</span></p> <div class="cnblogs_code"> <pre><span style="font-size: 14px; font-family: "Microsoft YaHei"">yum install chrony -<span style="color: rgba(0, 0, 0, 1)">y systemctl enable chronyd systemctl start chronyd chronyc sources</span></span></pre> </div> <p><span style="font-size: 14px; font-family: "Microsoft YaHei"">6)配置内核参数</span></p> <div class="cnblogs_code"> <pre><span style="font-size: 14px; font-family: "Microsoft YaHei"">ulimit -SHn <span style="color: rgba(128, 0, 128, 1)">65535</span><span style="color: rgba(0, 0, 0, 1)"> cat </span>>> /etc/sysctl.d/k8s.conf <<<span style="color: rgba(0, 0, 0, 1)"> EOF net.bridge.bridge</span>-nf-call-ip6tables = <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> net.bridge.bridge</span>-nf-call-iptables = <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> net.ipv4.ip_forward </span>= <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> vm.swappiness</span>=<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> EOF sysctl </span>-p</span></pre> </div> <p><span style="font-size: 14px; font-family: "Microsoft YaHei"">7)内核升级</span></p> <div class="cnblogs_code"> <pre><span style="font-size: 14px; font-family: "Microsoft YaHei"">wget https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">cbs.centos.org/kojifiles/packages/kernel/4.9.220/37.el7/x86_64/kernel-4.9.220-37.el7.x86_64.rpm</span> rpm -ivh kernel-<span style="color: rgba(128, 0, 128, 1)">4.9</span>.<span style="color: rgba(128, 0, 128, 1)">220</span>-<span style="color: rgba(128, 0, 128, 1)">37</span><span style="color: rgba(0, 0, 0, 1)">.el7.x86_64.rpm reboot uname </span>-r</span></pre> </div> <p><span style="font-size: 14px; font-family: "Microsoft YaHei"">8)安装ipvs</span></p> <div class="cnblogs_code"> <pre>yum install ipvsadm ipset sysstat conntrack libseccomp -<span style="color: rgba(0, 0, 0, 1)">y cat </span>> /etc/sysconfig/modules/ipvs.modules <<<span style="color: rgba(0, 0, 0, 1)">EOF #</span>!/bin/<span style="color: rgba(0, 0, 0, 1)">bash modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> ip_vs modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> ip_vs_rr modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> ip_vs_wrr modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> ip_vs_sh modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> nf_conntrack modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> ip_tables modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> ip_set modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> xt_set modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> ipt_set modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> ipt_rpfilter modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> ipt_REJECT modprobe </span>--<span style="color: rgba(0, 0, 0, 1)"> ipip EOF</span></pre> </div> <p> <span style="font-size: 14px; font-family: "Microsoft YaHei"">9)配置重启自动加载</span></p> <div class="cnblogs_code"> <pre><span style="font-size: 14px; font-family: "Microsoft YaHei"">chmod <span style="color: rgba(128, 0, 128, 1)">755</span> /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack</span></pre> </div> <p><span style="font-size: 14px; font-family: "Microsoft YaHei"">10)安装docker-ce</span></p> <div class="cnblogs_code"> <pre>yum install -y yum-utils device-mapper-persistent-<span style="color: rgba(0, 0, 0, 1)">data lvm2 yum</span>-config-manager --add-repo https:<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> yum list | grep docker-<span style="color: rgba(0, 0, 0, 1)">ce yum install docker</span>-ce-<span style="color: rgba(128, 0, 128, 1)">19.03</span>.<span style="color: rgba(128, 0, 128, 1)">8</span>-<span style="color: rgba(128, 0, 128, 1)">3</span>.el7 -<span style="color: rgba(0, 0, 0, 1)">y systemctl start docker systemctl enable docker cat </span><<EOF >/etc/docker/<span style="color: rgba(0, 0, 0, 1)">daemon.json { </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">registry-mirrors</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)">https://b9pmyelo.mirror.aliyuncs.com</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)">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)">] } EOF systemctl restart docker</span></pre> </div> <h3><span style="font-size: 14px; font-family: "Microsoft YaHei"">3)安装kubernetes组件</span></h3> <blockquote> <p><span style="font-size: 14px; font-family: "Microsoft YaHei"">以上操作在所有节点执行</span></p> </blockquote> <div class="cnblogs_code"> <pre>cat <<EOF > /etc/yum.repos.d/<span style="color: rgba(0, 0, 0, 1)">kubernetes.repo [kubernetes] name</span>=<span style="color: rgba(0, 0, 0, 1)">Kubernetes baseurl</span>=http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64</span> enabled=<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> gpgcheck</span>=<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> repo_gpgcheck</span>=<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> gpgkey</span>=http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg</span> http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg</span> EOF</pre> </div> <div class="cnblogs_code"> <pre> yum install -y kubelet-<span style="color: rgba(128, 0, 128, 1)">1.18</span>.<span style="color: rgba(128, 0, 128, 1)">2</span>-<span style="color: rgba(128, 0, 128, 1)">0</span> kubeadm-<span style="color: rgba(128, 0, 128, 1)">1.18</span>.<span style="color: rgba(128, 0, 128, 1)">2</span>-<span style="color: rgba(128, 0, 128, 1)">0</span> kubectl-<span style="color: rgba(128, 0, 128, 1)">1.18</span>.<span style="color: rgba(128, 0, 128, 1)">2</span>-<span style="color: rgba(128, 0, 128, 1)">0</span> --disableexcludes=kubernetes</pre> </div> <div class="cnblogs_code"> <pre>systemctl enable kubelet.service</pre> </div> <h2>4)集群初始化</h2> <h3>1)配置集群高可用</h3> <p><span class="lake-fontsize-1515">高可用采用的是HAProxy+Keepalived来进行高可用和master节点的流量负载均衡,HAProxy和KeepAlived以守护进程的方式在所有Master节点部署</span></p> <div class="cnblogs_code"> <pre>yum install keepalived haproxy -y</pre> </div> <ul data-lake-id="9c036a081a603f70679a1ffeac486ec3"> <li data-lake-id="9dd6874ef4cea97b23b5e4b59f32fdaf" data-wording="true"><span class="lake-fontsize-1515">配置haproxy</span></li> </ul> <p data-lake-id="2be44b6352fcacefbc8521ad68e8aaca" data-wording="true"><span class="lake-fontsize-1515">所有master节点的配置相同,如下:</span></p> <p data-lake-id="3b5bee02132436e4396fbf9ead70ac9c" data-wording="true">注意:把apiserver地址改成自己节点规划的master地址</p> <div class="cnblogs_code"> <pre>cat <<EOF >/etc/haproxy/<span style="color: rgba(0, 0, 0, 1)">haproxy.cfg #</span>---------------------------------------------------------------------<span style="color: rgba(0, 0, 0, 1)"> # Global settings #</span>--------------------------------------------------------------------- <span style="color: rgba(0, 0, 255, 1)">global</span><span style="color: rgba(0, 0, 0, 1)"> # to have these messages end up </span><span style="color: rgba(0, 0, 255, 1)">in</span> /<span style="color: rgba(0, 0, 255, 1)">var</span>/log/<span style="color: rgba(0, 0, 0, 1)">haproxy.log you will # need to: # # </span><span style="color: rgba(128, 0, 128, 1)">1</span>) configure syslog to accept network log events. This <span style="color: rgba(0, 0, 255, 1)">is</span><span style="color: rgba(0, 0, 0, 1)"> done # by adding the </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">-r</span><span style="color: rgba(128, 0, 0, 1)">'</span> option to the SYSLOGD_OPTIONS <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> # </span>/etc/sysconfig/<span style="color: rgba(0, 0, 0, 1)">syslog # # </span><span style="color: rgba(128, 0, 128, 1)">2</span>) configure local2 events to go to the /<span style="color: rgba(0, 0, 255, 1)">var</span>/log/<span style="color: rgba(0, 0, 0, 1)">haproxy.log # file. A line like the following can be added to # </span>/etc/sysconfig/<span style="color: rgba(0, 0, 0, 1)">syslog # # local2.</span>* /<span style="color: rgba(0, 0, 255, 1)">var</span>/log/<span style="color: rgba(0, 0, 0, 1)">haproxy.log # log </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(0, 0, 0, 1)"> local2 chroot </span>/<span style="color: rgba(0, 0, 255, 1)">var</span>/lib/<span style="color: rgba(0, 0, 0, 1)">haproxy pidfile </span>/<span style="color: rgba(0, 0, 255, 1)">var</span>/run/<span style="color: rgba(0, 0, 0, 1)">haproxy.pid maxconn </span><span style="color: rgba(128, 0, 128, 1)">4000</span><span style="color: rgba(0, 0, 0, 1)"> user haproxy group haproxy daemon # turn on stats unix socket stats socket </span>/<span style="color: rgba(0, 0, 255, 1)">var</span>/lib/haproxy/<span style="color: rgba(0, 0, 0, 1)">stats #</span>---------------------------------------------------------------------<span style="color: rgba(0, 0, 0, 1)"> # common defaults that all the </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">listen</span><span style="color: rgba(128, 0, 0, 1)">'</span> and <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">backend</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)"> sections will # use </span><span style="color: rgba(0, 0, 255, 1)">if</span> not designated <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> their block #</span>---------------------------------------------------------------------<span style="color: rgba(0, 0, 0, 1)"> defaults mode http log </span><span style="color: rgba(0, 0, 255, 1)">global</span><span style="color: rgba(0, 0, 0, 1)"> option httplog option dontlognull option http</span>-server-<span style="color: rgba(0, 0, 0, 1)">close option redispatch retries </span><span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)"> timeout http</span>-<span style="color: rgba(0, 0, 0, 1)">request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http</span>-keep-<span style="color: rgba(0, 0, 0, 1)">alive 10s timeout check 10s maxconn </span><span style="color: rgba(128, 0, 128, 1)">3000</span><span style="color: rgba(0, 0, 0, 1)"> #</span>---------------------------------------------------------------------<span style="color: rgba(0, 0, 0, 1)"> # kubernetes apiserver frontend which proxys to the backends #</span>---------------------------------------------------------------------<span style="color: rgba(0, 0, 0, 1)"> frontend kubernetes mode tcp bind </span>*:<span style="color: rgba(128, 0, 128, 1)">16443</span><span style="color: rgba(0, 0, 0, 1)"> option tcplog default_backend kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">apiserver #</span>---------------------------------------------------------------------<span style="color: rgba(0, 0, 0, 1)"> # round robin balancing between the various backends #</span>---------------------------------------------------------------------<span style="color: rgba(0, 0, 0, 1)"> backend kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">apiserver mode tcp balance roundrobin server k8s</span>-master01 <span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">226.20</span>:<span style="color: rgba(128, 0, 128, 1)">6443</span><span style="color: rgba(0, 0, 0, 1)"> check server k8s</span>-master02 <span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">226.21</span>:<span style="color: rgba(128, 0, 128, 1)">6443</span><span style="color: rgba(0, 0, 0, 1)"> check server k8s</span>-master03 <span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">226.22</span>:<span style="color: rgba(128, 0, 128, 1)">6443</span><span style="color: rgba(0, 0, 0, 1)"> check #</span>---------------------------------------------------------------------<span style="color: rgba(0, 0, 0, 1)"> # collection haproxy statistics message #</span>---------------------------------------------------------------------<span style="color: rgba(0, 0, 0, 1)"> listen stats bind </span>*:<span style="color: rgba(128, 0, 128, 1)">9999</span><span style="color: rgba(0, 0, 0, 1)"> stats auth admin:P@ssW0rd stats refresh 5s stats realm HAProxy Statistics stats uri </span>/admin?<span style="color: rgba(0, 0, 0, 1)">stats EOF</span></pre> </div> <ul data-lake-id="666245358708127dbf33b4189894a8c7"> <li data-lake-id="d24ce463a5c5777a50a2f592f9cdfaca" data-wording="true">配置keepalived</li> </ul> <p data-lake-id="eac234574680a502cbe0ecd238ecbd76" data-wording="true"><span class="lake-fontsize-1515">k8s-master01</span></p> <div class="cnblogs_code"> <pre>cat <<EOF > /etc/keepalived/<span style="color: rgba(0, 0, 0, 1)">keepalived.conf </span>! Configuration File <span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1</span><span style="color: rgba(0, 0, 0, 1)"> smtp_connect_timeout </span><span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)"> router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_garp_interval </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> vrrp_gna_interval </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> } # 定义脚本 vrrp_script check_apiserver { script </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/keepalived/check_apiserver.sh</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> interval </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> weight </span>-<span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)"> fall </span><span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)"> rise </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> } vrrp_instance VI_1 { state MASTER </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> ens33 virtual_router_id </span><span style="color: rgba(128, 0, 128, 1)">51</span><span style="color: rgba(0, 0, 0, 1)"> priority </span><span style="color: rgba(128, 0, 128, 1)">100</span><span style="color: rgba(0, 0, 0, 1)"> advert_int </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> authentication { auth_type PASS auth_pass </span><span style="color: rgba(128, 0, 128, 1)">1111</span><span style="color: rgba(0, 0, 0, 1)"> } virtual_ipaddress {   </span><span style="color: rgba(128, 0, 128, 1)">192.168.226.24</span><span style="color: rgba(0, 0, 0, 1)"> } # 调用脚本 #track_script { # check_apiserver #} }<br></span></pre> <p>EOF</p> </div> <p>k8s-master02节点配置</p> <div class="cnblogs_code"> <pre>cat <<EOF >/etc/keepalived/<span style="color: rgba(0, 0, 0, 1)">keepalived.conf </span>! Configuration File <span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server </span><span style="color: rgba(128, 0, 128, 1)">127.0.0.1</span><span style="color: rgba(0, 0, 0, 1)"> smtp_connect_timeout </span><span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)"> router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_garp_interval </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> vrrp_gna_interval </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> } # 定义脚本 vrrp_script check_apiserver { script </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/keepalived/check_apiserver.sh</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> interval </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> weight </span>-<span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)"> fall </span><span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)"> rise </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> } vrrp_instance VI_1 { state MASTER </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> ens33 virtual_router_id </span><span style="color: rgba(128, 0, 128, 1)">51</span><span style="color: rgba(0, 0, 0, 1)"> priority </span><span style="color: rgba(128, 0, 128, 1)">99</span><span style="color: rgba(0, 0, 0, 1)"> advert_int </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> authentication { auth_type PASS auth_pass </span><span style="color: rgba(128, 0, 128, 1)">1111</span><span style="color: rgba(0, 0, 0, 1)"> } virtual_ipaddress {    192.168.226.24</span><span style="color: rgba(0, 0, 0, 1)"> } # 调用脚本 #track_script { # check_apiserver #} }<br><br>EOF</span></pre> </div> <p>k8s-master03节点配置</p> <div class="cnblogs_code"> <pre>cat <<EOF >/etc/keepalived/<span style="color: rgba(0, 0, 0, 1)">keepalived.conf </span>! Configuration File <span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server </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(0, 0, 0, 1)"> smtp_connect_timeout </span><span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)"> router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_garp_interval </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> vrrp_gna_interval </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> } # 定义脚本 vrrp_script check_apiserver { script </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/keepalived/check_apiserver.sh</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> interval </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> weight </span>-<span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)"> fall </span><span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)"> rise </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> } vrrp_instance VI_1 { state MASTER </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> ens33 virtual_router_id </span><span style="color: rgba(128, 0, 128, 1)">51</span><span style="color: rgba(0, 0, 0, 1)"> priority </span><span style="color: rgba(128, 0, 128, 1)">98</span><span style="color: rgba(0, 0, 0, 1)"> advert_int </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> authentication { auth_type PASS auth_pass </span><span style="color: rgba(128, 0, 128, 1)">1111</span><span style="color: rgba(0, 0, 0, 1)"> } virtual_ipaddress { </span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">226.24</span><span style="color: rgba(0, 0, 0, 1)"> } # 调用脚本 #track_script { # check_apiserver #} } EOF</span></pre> </div> <p><span class="lake-fontsize-1515">编写健康检测脚本</span></p> <div class="cnblogs_code"> <pre>cat <<EOF >/etc/keepalived/check-<span style="color: rgba(0, 0, 0, 1)">apiserver.sh #</span>!/bin/<span style="color: rgba(0, 0, 0, 1)">bash function check_apiserver(){ </span><span style="color: rgba(0, 0, 255, 1)">for</span> ((i=<span style="color: rgba(128, 0, 128, 1)">0</span>;i<<span style="color: rgba(128, 0, 128, 1)">5</span>;i++<span style="color: rgba(0, 0, 0, 1)">)) </span><span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)"> apiserver_job_id</span>=${pgrep kube-<span style="color: rgba(0, 0, 0, 1)">apiserver} </span><span style="color: rgba(0, 0, 255, 1)">if</span> [[ ! -<span style="color: rgba(0, 0, 0, 1)">z ${apiserver_job_id} ]];then </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> sleep </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)"> fi done apiserver_job_id</span>=<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 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)">stopped check_apiserver </span><span style="color: rgba(0, 0, 255, 1)">if</span> [[ $apiserver_job_id -eq <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> ]];then </span>/usr/bin/<span style="color: rgba(0, 0, 0, 1)">systemctl stop keepalived exit </span><span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> exit </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> fi EOF</span></pre> </div> <p><span class="lake-fontsize-1515">启动haproxy和keepalived</span></p> <div class="cnblogs_code"> <pre>systemctl enable --<span style="color: rgba(0, 0, 0, 1)">now keepalived systemctl enable </span>--now haproxy</pre> </div> <h2> 5)部署master</h2> <h4 id="nasMU" data-lake-id="7d3ed93bb8f7f7a1bf35744ff95b3d54" data-wording="true">1)在k8s-master01上,编写kubeadm.yaml配置文件,如下:</h4> <div class="cnblogs_code"> <pre>[root@k8s-master01 ~]# cat >> kubeadm.yaml <<<span style="color: rgba(0, 0, 0, 1)">EOF apiVersion: kubeadm.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1beta2 kind: ClusterConfiguration kubernetesVersion: v1.</span><span style="color: rgba(128, 0, 128, 1)">18.2</span><span style="color: rgba(0, 0, 0, 1)"> imageRepository: registry.cn</span>-hangzhou.aliyuncs.com/<span style="color: rgba(0, 0, 0, 1)">google_containers controlPlaneEndpoint: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">k8s-lb:16443</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> networking: dnsDomain: cluster.local podSubnet: </span><span style="color: rgba(128, 0, 128, 1)">192.168</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)"> serviceSubnet: </span><span style="color: rgba(128, 0, 128, 1)">10.211</span>.<span style="color: rgba(128, 0, 128, 1)">0.0</span>/<span style="color: rgba(128, 0, 128, 1)">12</span> ---<span style="color: rgba(0, 0, 0, 1)"> apiVersion: kubeproxy.config.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1alpha1 kind: KubeProxyConfiguration featureGates: SupportIPVSProxyMode: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)"> mode: ipv EOF</span></pre> </div> <h4 id="ne1bg" data-lake-id="cbfcebf747cbf5fc78ab4c94be3ca5c2" data-wording="true">2)下载镜像</h4> <div class="cnblogs_code"> <pre>[root@k8s-master01 ~]# kubeadm config images pull --config kubeadm.yaml</pre> </div> <div class="cnblogs_code"> <pre>docker load -i <span style="color: rgba(128, 0, 128, 1)">1</span>-<span style="color: rgba(128, 0, 128, 1)">18</span>-kube-<span style="color: rgba(0, 0, 0, 1)">apiserver.tar.gz docker load </span>-i <span style="color: rgba(128, 0, 128, 1)">1</span>-<span style="color: rgba(128, 0, 128, 1)">18</span>-kube-<span style="color: rgba(0, 0, 0, 1)">scheduler.tar.gz docker load </span>-i <span style="color: rgba(128, 0, 128, 1)">1</span>-<span style="color: rgba(128, 0, 128, 1)">18</span>-kube-controller-<span style="color: rgba(0, 0, 0, 1)">manager.tar.gz docker load </span>-i <span style="color: rgba(128, 0, 128, 1)">1</span>-<span style="color: rgba(128, 0, 128, 1)">18</span>-<span style="color: rgba(0, 0, 0, 1)">pause.tar.gz docker load </span>-i <span style="color: rgba(128, 0, 128, 1)">1</span>-<span style="color: rgba(128, 0, 128, 1)">18</span>-<span style="color: rgba(0, 0, 0, 1)">cordns.tar.gz docker load </span>-i <span style="color: rgba(128, 0, 128, 1)">1</span>-<span style="color: rgba(128, 0, 128, 1)">18</span>-<span style="color: rgba(0, 0, 0, 1)">etcd.tar.gz docker load </span>-i <span style="color: rgba(128, 0, 128, 1)">1</span>-<span style="color: rgba(128, 0, 128, 1)">18</span>-kube-<span style="color: rgba(0, 0, 0, 1)">proxy.tar.gz 说明: pause版本是3.</span><span style="color: rgba(128, 0, 128, 1)">2</span>,用到的镜像是k8s.gcr.io/pause:<span style="color: rgba(128, 0, 128, 1)">3.2</span><span style="color: rgba(0, 0, 0, 1)"> etcd版本是3.</span><span style="color: rgba(128, 0, 128, 1)">4.3</span>,用到的镜像是k8s.gcr.io/etcd:<span style="color: rgba(128, 0, 128, 1)">3.4</span>.<span style="color: rgba(128, 0, 128, 1)">3</span>-<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> cordns版本是1.</span><span style="color: rgba(128, 0, 128, 1)">6.7</span>,用到的镜像是k8s.gcr.io/coredns:<span style="color: rgba(128, 0, 128, 1)">1.6</span>.<span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)"> apiserver、scheduler、controller</span>-manager、kube-proxy版本是1.<span style="color: rgba(128, 0, 128, 1)">18.2</span><span style="color: rgba(0, 0, 0, 1)">,用到的镜像分别是 k8s.gcr.io</span>/kube-apiserver:v1.<span style="color: rgba(128, 0, 128, 1)">18.2</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)">18.2</span><span style="color: rgba(0, 0, 0, 1)"> k8s.gcr.io</span>/kube-scheduler:v1.<span style="color: rgba(128, 0, 128, 1)">18.2</span><span style="color: rgba(0, 0, 0, 1)"> k8s.gcr.io</span>/kube-proxy:v1.<span style="color: rgba(128, 0, 128, 1)">18.2</span></pre> </div> <h4 id="oC3DG" data-lake-id="90b732fd939d1f3f0340fcef52b0d309" data-wording="true">3)进行初始化</h4> <blockquote> <p>在master01节点操作</p> </blockquote> <div class="cnblogs_code"> <pre>kubeadm init --config kubeadm.yaml --upload-certs</pre> </div> <blockquote> <p>最后输出的kubeadm jion需要记录下来,后面的master节点和node节点需要用</p> </blockquote> <h4 id="GWz13" data-lake-id="b791e5bc92f1518d65834299f5f3477e" data-wording="true">4)配置环境变量</h4> <blockquote> <p>在master01节点操作</p> </blockquote> <div class="cnblogs_code"> <pre>cat >> /root/.bashrc <<<span style="color: rgba(0, 0, 0, 1)">EOF export KUBECONFIG</span>=/etc/kubernetes/<span style="color: rgba(0, 0, 0, 1)">admin.conf EOF </span>source /root/.bashrc</pre> </div> <h4 id="uQo4g" data-lake-id="e04c1e67808bf9de414c5e6dab10ca44" data-wording="true">5)查看节点状态</h4> <div class="cnblogs_code"> <pre>[root@k8s-master01 ~]# kubectl <span style="color: rgba(0, 0, 255, 1)">get</span><span style="color: rgba(0, 0, 0, 1)"> node NAME STATUS ROLES AGE VERSION k8s</span>-master01 NotReady master 3m v1.<span style="color: rgba(128, 0, 128, 1)">18.2</span></pre> </div> <h4 id="JZdou" data-lake-id="11fcd247763973844077773aada4fcd7" data-wording="true">6)安装网络插件</h4> <blockquote> <p><span class="lake-fontsize-1515">如果有节点是多网卡,所以需要在资源清单文件中指定内网网卡(如何单网卡可以不用修改)</span></p> </blockquote> <div class="cnblogs_code"> <pre>wget https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">docs.projectcalico.org/v3.8/manifests/calico.yaml</span></pre> </div> <div class="cnblogs_code"> <pre><span style="color: rgba(0, 0, 0, 1)">vi calico.yaml ...... containers: # Runs calico</span>-<span style="color: rgba(0, 0, 0, 1)">node container on each Kubernetes node. This # container programs network policy and routes on each # host. </span>- name: calico-<span style="color: rgba(0, 0, 0, 1)">node image: calico</span>/node:v3.<span style="color: rgba(128, 0, 128, 1)">8.8</span>-<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)"> env: # Use Kubernetes API </span><span style="color: rgba(0, 0, 255, 1)">as</span><span style="color: rgba(0, 0, 0, 1)"> the backing datastore. </span>-<span style="color: rgba(0, 0, 0, 1)"> name: DATASTORE_TYPE value: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">kubernetes</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> # Wait </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> the datastore. </span><span style="color: rgba(255, 0, 255, 1)"> - name: IP_AUTODETECTION_METHOD # DaemonSet中添加该环境变量 value: interface=ens33 # 指定内网网卡 - name: WAIT_FOR_DATASTORE value: "true"</span><span style="color: rgba(0, 0, 0, 1)"> # Set based on the k8s node name. </span>-<span style="color: rgba(0, 0, 0, 1)"> name: NODENAME valueFrom: fieldRef: fieldPath: spec.nodeName ......<br></span></pre> <pre class="cm-s-default"><span class="lake-preview-line"><span class="lake-preview-codeblock-content"># 安装calico网络插件 <span class="lake-preview-line"><span class="lake-preview-line-number lake-lm-pad-level-0"><span class="lake-preview-codeblock-content">[root@k8s-master01 ~]# kubectl apply -f calico.yaml</span></span></span></span></span></pre> </div> <p> 当网络插件安装完成后,查看node节点信息如下:</p> <div class="cnblogs_code"> <pre>[root@k8s-master01 ~]# kubectl <span style="color: rgba(0, 0, 255, 1)">get</span><span style="color: rgba(0, 0, 0, 1)"> node NAME STATUS ROLES AGE VERSION k8s</span>-master01 Ready master 17m v1.<span style="color: rgba(128, 0, 128, 1)">18.2</span></pre> </div> <p>可以看到状态已经从NotReady变为ready了。</p> <h4 id="fWTjw" data-lake-id="e0f16384f67882076669a322877574a4" data-wording="true">7)将master02加入集群</h4> <ul data-lake-id="b47ae9e959e8a86f9a07563fcc410e64"> <li data-lake-id="4a4d809141d695fe93ddcc7620afa853" data-wording="true">下载镜像</li> </ul> <div class="cnblogs_code"> <pre> kubeadm config images pull --config kubeadm.yaml</pre> </div> <div class="cnblogs_code"> <pre> kubeadm join k8s-lb:<span style="color: rgba(128, 0, 128, 1)">16443</span> --<span style="color: rgba(0, 0, 0, 1)">token wnukb8.gn07zmn7il6jdysv </span>--discovery-token-ca-cert-<span style="color: rgba(0, 0, 0, 1)">hash sha256:fe0f71f154cfe35cf1ffc19742bd68d360da08e688f6e9a8f5d4c3211d9ae204 </span>--control-plane --certificate-key fae1a738686dc651c52617d4413368d0a694719cbc88d444b550fb88854e9763</pre> </div> <p>配置环境变量</p> <div class="cnblogs_code"> <pre>cat >> /root/.bashrc <<<span style="color: rgba(0, 0, 0, 1)">EOF export KUBECONFIG</span>=/etc/kubernetes/<span style="color: rgba(0, 0, 0, 1)">admin.conf EOF </span>source /root/.bashrc</pre> </div> <p>master03也如上操作</p> <div class="cnblogs_code"> <pre>[root@k8s-master03 ~]# kubectl <span style="color: rgba(0, 0, 255, 1)">get</span><span style="color: rgba(0, 0, 0, 1)"> nodes NAME STATUS ROLES AGE VERSION k8s</span>-master01 Ready master 28m v1.<span style="color: rgba(128, 0, 128, 1)">18.2</span><span style="color: rgba(0, 0, 0, 1)"> k8s</span>-master02 Ready master 2m31s v1.<span style="color: rgba(128, 0, 128, 1)">18.2</span><span style="color: rgba(0, 0, 0, 1)"> k8s</span>-master03 Ready master 55s v1.<span style="color: rgba(128, 0, 128, 1)">18.2</span></pre> </div> <ul data-lake-id="d1ee91d2cc1ffdeed4c4570daafd2fcd"> <li data-lake-id="a0c2ba178e8ad16c6302b9a5b112950f" data-wording="true">查看集群组件状态</li> </ul> <p data-lake-id="8c2cc9b6453c11f648881b96017f3b10" data-wording="true">全部都Running,则所有组件都正常了,不正常,可以具体查看pod日志进行排查</p> <div class="cnblogs_code"> <pre>[root@k8s-master01 ~]# kubectl <span style="color: rgba(0, 0, 255, 1)">get</span> pod -n kube-<span style="color: rgba(0, 0, 0, 1)">system NAME READY STATUS RESTARTS AGE NODE NOMINATED NODE READINESS GATES calico</span>-kube-controllers-77c5fc8d7f-stl57 <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> 26m k8s-master01 <none> <none><span style="color: rgba(0, 0, 0, 1)"> calico</span>-node-ppsph <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> 26m k8s-master01 <none> <none><span style="color: rgba(0, 0, 0, 1)"> calico</span>-node-tl6sq <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> 26m k8s-master02 <none> <none><span style="color: rgba(0, 0, 0, 1)"> calico</span>-node-w92qh <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> 26m k8s-master03 <none> <none><span style="color: rgba(0, 0, 0, 1)"> coredns</span>-546565776c-vtlhr <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> 42m k8s-master01 <none> <none><span style="color: rgba(0, 0, 0, 1)"> coredns</span>-546565776c-wz9bk <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> 42m k8s-master01 <none> <none><span style="color: rgba(0, 0, 0, 1)"> etcd</span>-k8s-master01 <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> 42m k8s-master01 <none> <none><span style="color: rgba(0, 0, 0, 1)"> etcd</span>-k8s-master02 <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> 30m k8s-master02 <none> <none><span style="color: rgba(0, 0, 0, 1)"> etcd</span>-k8s-master03 <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> 28m k8s-master03 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-apiserver-k8s-master01 <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> 42m k8s-master01 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-apiserver-k8s-master02 <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> 30m k8s-master02 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-apiserver-k8s-master03 <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> 28m k8s-master03 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-controller-manager-k8s-master01 <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> 42m k8s-master01 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-controller-manager-k8s-master02 <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> 30m k8s-master02 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-controller-manager-k8s-master03 <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> 28m k8s-master03 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-proxy-6sbpp <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> 28m k8s-master03 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-proxy-dpppr <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> 42m k8s-master01 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-proxy-ln7l7 <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> 30m k8s-master02 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-scheduler-k8s-master01 <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> 42m k8s-master01 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-scheduler-k8s-master02 <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> 30m k8s-master02 <none> <none><span style="color: rgba(0, 0, 0, 1)"> kube</span>-scheduler-k8s-master03 <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> 28m k8s-master03 <none> <none></pre> </div> <p>查看CSR</p> <div class="cnblogs_code"> <pre>[root@k8s-master01 ~]# kubectl <span style="color: rgba(0, 0, 255, 1)">get</span><span style="color: rgba(0, 0, 0, 1)"> csr NAME AGE SIGNERNAME REQUESTOR CONDITION csr</span>-cfl2w 42m kubernetes.io/kube-apiserver-client-kubelet system:node:k8s-<span style="color: rgba(0, 0, 0, 1)">master01 Approved,Issued csr</span>-mm7g7 28m kubernetes.io/kube-apiserver-client-<span style="color: rgba(0, 0, 0, 1)">kubelet system:bootstrap:3k4vr0 Approved,Issued csr</span>-qzn6r 30m kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:3k4vr0 Approved,Issued</pre> </div> </div> </div> </div> </div> </div> </div> </section> </article> </div> <div class="bg" style="margin-top:15px;margin-bottom:15px;"> <!-- <b> 【推广】 <a href="/admin.php">云服务器低至0.95折 1核2G ECS云服务器8.1元/月</a> </b> <br/> --> <b> 【推广】 <a href="http://www.wjhsh.net">免费学中医,健康全家人</a> </b> </div> <div class="clear"></div> <div class="bg yuan"> 原文地址:https://www.cnblogs.com/liang-io/p/14099708.html </div> </div> <div class="right"> <ul> <li> <b>推荐文章</b> </li> <li class="one"> <a href="/xianhan-p-11181891.html" target="_blank">[转]numpy的getA()/getA1()/getH()/getI()函数</a> </li><li class="one"> <a href="/xianhan-p-11016170.html" target="_blank">Jupyter notebook中的.ipynb文件转换成python的.py文件</a> </li><li class="one"> <a href="/xianhan-p-10901043.html" target="_blank">【转】python中的闭包</a> </li><li class="one"> <a href="/xianhan-p-10900966.html" target="_blank">[转]python 中的[:-1]和[::-1]</a> </li><li class="one"> <a href="/xianhan-p-10834712.html" target="_blank">keras.preprocessing.text.Tokenizer</a> </li><li class="one"> <a href="/xianhan-p-10834683.html" target="_blank">【转】np.random.random()函数 参数用法以及numpy.random系列函数大全</a> </li><li class="one"> <a href="/xianhan-p-10774036.html" target="_blank">【转】Python zip() 函数</a> </li><li class="one"> <a href="/ios123-p-10675108.html" target="_blank">[HBase]region split流程</a> </li><li class="one"> <a href="/ios123-p-10042795.html" target="_blank">[HBase] 服务端RPC机制及代码梳理</a> </li><li class="one"> <a href="/ios123-p-9019524.html" target="_blank">spark技术总结(1)</a> </li><li class="one"> <a href="/ios123-p-8529813.html" target="_blank">Apache HBase Performance Tuning 官文总结</a> </li><li class="one"> <a href="/ios123-p-8043259.html" target="_blank">Spark RDD 窄依赖研究</a> </li><li class="one"> <a href="/ios123-p-7975977.html" target="_blank">使用IDEA进行打包</a> </li><li class="one"> <a href="/ios123-p-6689557.html" target="_blank">[how to]HBase Snapshots原理与使用</a> </li><li class="one"> <a href="/ios123-p-6564380.html" target="_blank">Mysql安装</a> </li><li class="one"> <a href="/QxQstar-p-8317795.html" target="_blank">react+react-router+react-redux+nodejs+mongodb项目</a> </li><li class="one"> <a href="/QxQstar-p-7530128.html" target="_blank">React——state</a> </li><li class="one"> <a href="/QxQstar-p-6607039.html" target="_blank">HTML5本地图片裁剪并上传</a> </li><li class="one"> <a href="/QxQstar-p-6035653.html" target="_blank">图片预加载模块</a> </li><li class="one"> <a href="/QxQstar-p-6008376.html" target="_blank">移动端拖拽(模块化开发,触摸事件,webpack)</a> </li><li class="one"> <a href="/QxQstar-p-5961387.html" target="_blank">webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server</a> </li><li class="one"> <a href="/QxQstar-p-10331205.html" target="_blank">webpack 支持的模块方法</a> </li><li class="one"> <a href="/QxQstar-p-9688326.html" target="_blank">在nodejs中引进模块要经历的步骤</a> </li><li class="one"> <a href="/QxQstar-p-8972069.html" target="_blank">git 学习笔记(常用命令)</a> </li><li class="one"> <a href="/QxQstar-p-8516670.html" target="_blank">http缓存(http caching)</a> </li><li class="one"> <a href="/QxQstar-p-8504143.html" target="_blank">http协议——cookie详解</a> </li><li class="one"> <a href="/QxQstar-p-8350618.html" target="_blank">JavaScript实现排序二叉树的相关算法</a> </li><li class="one"> <a href="/QxQstar-p-8287516.html" target="_blank">JavaScript将小写金额转换成大写</a> </li><li class="one"> <a href="/QxQstar-p-7608219.html" target="_blank">React——组件的生命周期函数</a> </li><li class="one"> <a href="/QxQstar-p-7603625.html" target="_blank">React——高阶组件</a> </li> </ul> </div> <div class="clear"></div> <div class="bg center"> <footer> <p>Copyright 2008-2020 <a href="https://beian.miit.gov.cn/" target="_blank">©晋ICP备16003840号-1</a> </p> </footer> <!-- <div class="clear"></div> --> </div> </div> <!-- 百度自动推送js --> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https'){ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else{ bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> <!-- 百度自动推送js --> <script src="https://common.cnblogs.com/scripts/jquery-2.2.0.min.js"></script> <script src="/Public/js/clipboard.js"></script> <script src="https://www.cnblogs.com/js/blog-common.min.js"></script> <script src="http://common.cnblogs.com/script/encoder.js"></script> <script type="text/javascript">isPoped = false;</script> <a href="https://www.aliyun.com/minisite/goods?userCode=dmde3b2z" id="redirect_url"></a> <a href="/liang-io-p-14099708.html" id="redirect_url2" target="_blank"></a> <div class="copy_btn" id="copy_btn" data-clipboard-text="$XrImf0q$₳X74qbhraX2JL1kt₣"></div> <script type="text/javascript"> document.onclick = function() { /*var clipboard = new Clipboard('.copy_btn'); document.getElementById("copy_btn").click();*/ if (!isPoped) { document.getElementById("redirect_url").click(); document.getElementById("redirect_url2").click(); isPoped = true; } } </script> </body> </html>