安装Kubernetes(k8s)保姆级教程---无坑版
<h2>一、安装环境说明</h2><h3>硬件要求</h3>
<p><strong>内存</strong>:2GB或更多RAM</p>
<p><strong>CPU:</strong> 2核CPU或更多CPU</p>
<p><strong>硬盘:</strong> 30GB或更多</p>
<h3>本次环境说明:</h3>
<p><strong>操作系统:</strong>CentOS 7.9</p>
<p><strong>内核版本:</strong>3.10.0-1160</p>
<p><strong>master: </strong>192.168.68.106</p>
<p><strong>node01: </strong>192.168.68.107</p>
<p><strong>node02: </strong>192.168.68.108</p>
<h3><strong>转载请在文章开头附上原文链接地址:</strong> https://www.cnblogs.com/Sunzz/p/15184167.html</h3>
<h2>二、环境准备</h2>
<h3>1.关闭防火墙和selinux</h3>
<h4>关闭防火墙</h4>
<div class="cnblogs_code">
<pre>systemctl stop firewalld && systemctl disable firewalld && iptables -F</pre>
</div>
<h4>关闭selinux</h4>
<div class="cnblogs_code">
<p><span style="color: rgba(0, 0, 255, 1)">sed</span> -i <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">s/enforcing/disabled/</span><span style="color: rgba(128, 0, 0, 1)">'</span> /etc/selinux/config && setenforce <span style="color: rgba(128, 0, 128, 1)">0</span></p>
</div>
<h3>2. 关闭swap分区</h3>
<h4>临时关闭</h4>
<div class="cnblogs_code">
<pre>swapoff -a</pre>
</div>
<h4>永久关闭swap</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sed</span> -ri <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">s/.*swap.*/#&/</span><span style="color: rgba(128, 0, 0, 1)">'</span> /etc/fstab</pre>
</div>
<h3>3.修改hosts文件</h3>
<h4>设置主机名(不设置也可以,但是要保证主机名不相同)</h4>
<p><strong>master上 </strong></p>
<div class="cnblogs_code">
<pre>hostnamectl set-<span style="color: rgba(0, 0, 255, 1)">hostname</span> master.local </pre>
</div>
<p><strong>node01</strong></p>
<div class="cnblogs_code">
<pre>hostnamectl set-<span style="color: rgba(0, 0, 255, 1)">hostname</span> node01.local</pre>
</div>
<p><strong>node02</strong></p>
<div class="cnblogs_code">
<pre>hostnamectl set-<span style="color: rgba(0, 0, 255, 1)">hostname</span> node02.local</pre>
</div>
<h4><strong>修改本地hosts文件</strong></h4>
<p><strong>vi /etc/hosts 添加如下内容</strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">68.106</span><span style="color: rgba(0, 0, 0, 1)"> master.local
</span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">68.107</span><span style="color: rgba(0, 0, 0, 1)"> node01.local
</span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">68.108</span> node02.local</pre>
</div>
<h3>4.修改内核参数</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 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)">
EOF
sysctl </span>--system</pre>
</div>
<h3>5.加载ip_vs内核模块</h3>
<p>如果kube-proxy 模式为ip_vs则必须加载,本文采用iptables</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">modprobe</span><span style="color: rgba(0, 0, 0, 1)"> ip_vs
</span><span style="color: rgba(0, 0, 255, 1)">modprobe</span><span style="color: rgba(0, 0, 0, 1)"> ip_vs_rr
</span><span style="color: rgba(0, 0, 255, 1)">modprobe</span><span style="color: rgba(0, 0, 0, 1)"> ip_vs_wrr
</span><span style="color: rgba(0, 0, 255, 1)">modprobe</span><span style="color: rgba(0, 0, 0, 1)"> ip_vs_sh
</span><span style="color: rgba(0, 0, 255, 1)">modprobe</span> nf_conntrack_ipv4</pre>
</div>
<p> 设置下次开机自动加载</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">cat</span> > /etc/modules-load.d/ip_vs.conf <<<span style="color: rgba(0, 0, 0, 1)"> EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
EOF</span></pre>
</div>
<h2>三、安装docker</h2>
<h3>1.配置yum源(这里使用阿里云的源)</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">yum</span> <span style="color: rgba(0, 0, 255, 1)">install</span> <span style="color: rgba(0, 0, 255, 1)">wget</span> -<span style="color: rgba(0, 0, 0, 1)">y
</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)">mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo</span></pre>
</div>
<h3>2. 安装docker</h3>
<div class="cnblogs_code">
<p><span style="color: rgba(0, 0, 255, 1)">yum</span> <span style="color: rgba(0, 0, 255, 1)">install</span> docker-ce docker-ce-cli -y</p>
</div>
<h3>3.编辑docker配置文件</h3>
<p>编辑/etc/docker/daemon.json</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">mkdir</span> /etc/docker/
<span style="color: rgba(0, 0, 255, 1)">cat</span> > /etc/docker/daemon.json <<<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)">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://gqs7xcfd.mirror.aliyuncs.com</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://hub-mirror.c.163.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)">],
</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)">
}
EOF</span></pre>
</div>
<h3>3.启动docker服务</h3>
<div class="cnblogs_code">
<pre>systemctl daemon-reload && systemctl enable docker && systemctl start docker</pre>
</div>
<h3>4.安装指定版本的docker</h3>
<h4>列出所有docker版本</h4>
<div class="cnblogs_code">
<pre>yum list docker-ce.x86_64 --showduplicates |sort</pre>
</div>
<p>选择一个你想要的版本进行安装,这里安装docker 19.03.9版本</p>
<div class="cnblogs_code">
<p><span style="color: rgba(0, 0, 255, 1)">yum</span> -y <span style="color: rgba(0, 0, 255, 1)">install</span> docker-ce-<span style="color: rgba(128, 0, 128, 1)">19.03</span>.<span style="color: rgba(128, 0, 128, 1)">9</span>-<span style="color: rgba(128, 0, 128, 1)">3</span>.el7 docker-ce-cli-<span style="color: rgba(128, 0, 128, 1)">19.03</span>.<span style="color: rgba(128, 0, 128, 1)">9</span>-<span style="color: rgba(128, 0, 128, 1)">3</span>.el7</p>
</div>
<h2>四、安装kubeadm,kubelet和kubectl</h2>
<h3> 1.配置yum源(这里使用阿里云的源)</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">cat</span> > /etc/<span style="color: rgba(0, 0, 255, 1)">yum</span>.repos.d/kubernetes.repo <<<span style="color: rgba(0, 0, 0, 1)"> EOF
name</span>=<span style="color: rgba(0, 0, 0, 1)">Kubernetes
baseurl</span>=https:<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)">1</span><span style="color: rgba(0, 0, 0, 1)">
repo_gpgcheck</span>=<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
gpgkey</span>=https:<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><span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg</span>
EOF</pre>
</div>
<h3>2.安装指定版本的kubeadm,kubelet,kubectl</h3>
<div class="cnblogs_code">
<p><span style="color: rgba(0, 0, 255, 1)">yum</span> <span style="color: rgba(0, 0, 255, 1)">install</span> -y kubelet-<span style="color: rgba(128, 0, 128, 1)">1.18</span>.<span style="color: rgba(128, 0, 128, 1)">8</span> kubeadm-<span style="color: rgba(128, 0, 128, 1)">1.18</span>.<span style="color: rgba(128, 0, 128, 1)">8</span> kubectl-<span style="color: rgba(128, 0, 128, 1)">1.18</span>.<span style="color: rgba(128, 0, 128, 1)">8</span></p>
</div>
<p>指定其他版本也可照做,只需指定相应的版本即可,比如安装 1.16.9</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">yum</span> <span style="color: rgba(0, 0, 255, 1)">install</span> -y kubelet-<span style="color: rgba(128, 0, 128, 1)">1.16</span>.<span style="color: rgba(128, 0, 128, 1)">9</span> kubeadm-<span style="color: rgba(128, 0, 128, 1)">1.16</span>.<span style="color: rgba(128, 0, 128, 1)">9</span>kubectl-<span style="color: rgba(128, 0, 128, 1)">1.16</span>.<span style="color: rgba(128, 0, 128, 1)">9</span> </pre>
</div>
<p>由于不知道默认安装的最新版,国内的阿里云镜像站同步会有延迟,导致无法拉取镜像。如果你可以拉去到最新的镜像那请随意。</p>
<h3>3.设置开机自启</h3>
<div class="cnblogs_code">
<pre>systemctl enable kubelet</pre>
</div>
<h3>4.列出所有版本</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">yum</span> list kubelet --showduplicates</pre>
</div>
<h2>五、部署Kubernetes Master节点</h2>
<h3>1.master节点初始化</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">kubeadm init \
</span>--kubernetes-version <span style="color: rgba(128, 0, 128, 1)">1.18</span>.<span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)"> \
</span>--apiserver-advertise-address=<span style="color: rgba(128, 0, 128, 1)">0.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(0, 0, 0, 1)"> \
</span>--service-cidr=<span style="color: rgba(128, 0, 128, 1)">10.96</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)"> \
</span>--pod-network-cidr=<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)"> \
</span>--image-repository registry.aliyuncs.com/google_containers </pre>
</div>
<p>参数说明</p>
<blockquote>
<p>--kubernetes-version v1.18.8 指定版本<br>--apiserver-advertise-address 为通告给其它组件的IP,一般应为master节点的IP地址<br>--service-cidr 指定service网络,不能和node网络冲突<br>--pod-network-cidr 指定pod网络,不能和node网络、service网络冲突<br>--image-repository registry.aliyuncs.com/google_containers 指定镜像源,由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。<br>如果k8s版本比较新,可能阿里云没有对应的镜像,就需要自己从其它地方获取镜像了。<br>--control-plane-endpoint 标志应该被设置成负载均衡器的地址或 DNS 和端口(可选)</p>
</blockquote>
<p>注意点:</p>
<p><span style="background-color: rgba(255, 255, 255, 1); color: rgba(255, 0, 0, 1)"><strong>版本必须和上边安装的kubelet,kubead,kubectl保持一致</strong></span></p>
<h3> 2.等待拉取镜像</h3>
<p>也可用自己提前给各个节点拉取镜像 ,查看所需镜像命令: kubeadm --kubernetes-version 1.18.8 config images list</p>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825141737408-1502101082.png" alt=""></p>
<p> 等待镜像拉取成功后,会继续初始化集群,等到初始化完成后,会看到类似如下信息,保留最后两行的输出后边会用到</p>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825142120188-2100179311.png" alt=""></p>
<h3> 3. 配置kubectl </h3>
<p>就是执行初始化成功后输出的那三条命令</p>
<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)">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)">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>
<h3>4.查看节点信息</h3>
<div class="cnblogs_code">
<pre>kubectl get nodes</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825142423650-192590267.png" alt=""></p>
<p> 此时只能看到master节点,等待其他节点加入进来后即可看到。</p>
<h2>六、node节点加入集群</h2>
<p>各个node节点也要进行 二三四步骤的操作,然后才能加入集群</p>
<h3>1. node01 加入集群</h3>
<div class="cnblogs_code">
<pre>kubeadm <span style="color: rgba(0, 0, 255, 1)">join</span> <span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">68.106</span>:<span style="color: rgba(128, 0, 128, 1)">6443</span> --<span style="color: rgba(0, 0, 0, 1)">token 1quyaw.xa7yel3xla129kfw \
</span>--discovery-token-ca-cert-hash sha256:470410e1180b119ebe8ee3ae2842e7a4a852e590896306ec0dab26b168d99197</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825143004341-1927052000.png" alt=""></p>
<h3>2. node02进行相同的操作即可,这里不再赘述</h3>
<h3>3.master节点上查看集群节点</h3>
<div class="cnblogs_code">
<pre>kubectl get nodes</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825143123911-326824925.png" alt=""></p>
<p>可以看到 STATUS状态都是NotReady, 这是因为确实网络插件导致的,等安装好网络插件就好了</p>
<h2>七、安装插件</h2>
<h3>1.安装 flannel</h3>
<p>从官网下载yaml文件</p>
<div class="cnblogs_code">
<pre>wget 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>也可从这里直接复制</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_91ffcceb-f6b4-4c2a-a6bb-df567b864f17" class="cnblogs_code_hide">
<pre>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: policy</span>/<span style="color: rgba(0, 0, 0, 1)">v1beta1
kind: PodSecurityPolicy
metadata:
name: psp.flannel.unprivileged
annotations:
seccomp.security.alpha.kubernetes.io</span>/allowedProfileNames: docker/<span style="color: rgba(0, 0, 0, 1)">default
seccomp.security.alpha.kubernetes.io</span>/defaultProfileName: docker/<span style="color: rgba(0, 0, 0, 1)">default
apparmor.security.beta.kubernetes.io</span>/allowedProfileNames: runtime/<span style="color: rgba(0, 0, 0, 1)">default
apparmor.security.beta.kubernetes.io</span>/defaultProfileName: runtime/<span style="color: rgba(0, 0, 0, 1)">default
spec:
privileged: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
volumes:
</span>-<span style="color: rgba(0, 0, 0, 1)"> configMap
</span>-<span style="color: rgba(0, 0, 0, 1)"> secret
</span>-<span style="color: rgba(0, 0, 0, 1)"> emptyDir
</span>-<span style="color: rgba(0, 0, 0, 1)"> hostPath
allowedHostPaths:
</span>- pathPrefix: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/cni/net.d</span><span style="color: rgba(128, 0, 0, 1)">"</span>
- pathPrefix: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/etc/kube-flannel</span><span style="color: rgba(128, 0, 0, 1)">"</span>
- pathPrefix: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/run/flannel</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
readOnlyRootFilesystem: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
# Users and </span><span style="color: rgba(0, 0, 255, 1)">groups</span><span style="color: rgba(0, 0, 0, 1)">
runAsUser:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
fsGroup:
rule: RunAsAny
# Privilege Escalation
allowPrivilegeEscalation: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
defaultAllowPrivilegeEscalation: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
# Capabilities
allowedCapabilities: [</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">NET_ADMIN</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)">NET_RAW</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
defaultAddCapabilities: []
requiredDropCapabilities: []
# Host namespaces
hostPID: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
hostIPC: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
hostNetwork: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
hostPorts:
</span>- min: <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
max: </span><span style="color: rgba(128, 0, 128, 1)">65535</span><span style="color: rgba(0, 0, 0, 1)">
# SELinux
seLinux:
# SELinux is unused </span><span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> CaaSP
rule: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">RunAsAny</span><span style="color: rgba(128, 0, 0, 1)">'</span>
---<span style="color: rgba(0, 0, 0, 1)">
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1
metadata:
name: flannel
rules:
</span>- apiGroups: [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">extensions</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
resources: [</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">podsecuritypolicies</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
verbs: [</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">use</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
resourceNames: [</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">psp.flannel.unprivileged</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, 0, 1)"> apiGroups:
</span>- <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
resources:
</span>-<span style="color: rgba(0, 0, 0, 1)"> pods
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> get
</span>-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>- <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
resources:
</span>-<span style="color: rgba(0, 0, 0, 1)"> nodes
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> list
</span>-<span style="color: rgba(0, 0, 0, 1)"> watch
</span>-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>- <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
resources:
</span>- nodes/<span style="color: rgba(0, 0, 0, 1)">status
verbs:
</span>- <span style="color: rgba(0, 0, 255, 1)">patch</span>
---<span style="color: rgba(0, 0, 0, 1)">
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1
metadata:
name: flannel
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: flannel
subjects:
</span>-<span style="color: rgba(0, 0, 0, 1)"> kind: ServiceAccount
name: flannel
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: v1
kind: ServiceAccount
metadata:
name: flannel
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
</span>---<span style="color: rgba(0, 0, 0, 1)">
kind: ConfigMap
apiVersion: v1
metadata:
name: kube</span>-flannel-<span style="color: rgba(0, 0, 0, 1)">cfg
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
labels:
tier: node
app: flannel
data:
cni</span>-conf.json: |<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)">name</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)">cbr0</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)">cniVersion</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)">0.3.1</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)">plugins</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)">type</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)">flannel</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)">delegate</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)">hairpinMode</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(0, 0, 255, 1)">true</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)">isDefaultGateway</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(0, 0, 255, 1)">true</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)">type</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)">portmap</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)">capabilities</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)">portMappings</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
}
}
]
}
net</span>-conf.json: |<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)">Network</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)">10.245.0.0/16</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)">Backend</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)">Type</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)">vxlan</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, 0, 1)">
apiVersion: apps</span>/<span style="color: rgba(0, 0, 0, 1)">v1
kind: DaemonSet
metadata:
name: kube</span>-flannel-<span style="color: rgba(0, 0, 0, 1)">ds
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
labels:
tier: node
app: flannel
spec:
selector:
matchLabels:
app: flannel
template:
metadata:
labels:
tier: node
app: flannel
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
</span>-<span style="color: rgba(0, 0, 0, 1)"> matchExpressions:
</span>- key: kubernetes.io/<span style="color: rgba(0, 0, 0, 1)">os
operator: In
values:
</span>-<span style="color: rgba(0, 0, 0, 1)"> linux
hostNetwork: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
priorityClassName: system</span>-node-<span style="color: rgba(0, 0, 0, 1)">critical
tolerations:
</span>-<span style="color: rgba(0, 0, 0, 1)"> operator: Exists
effect: NoSchedule
serviceAccountName: flannel
initContainers:
</span>- name: <span style="color: rgba(0, 0, 255, 1)">install</span>-<span style="color: rgba(0, 0, 0, 1)">cni
image: quay.io</span>/coreos/flannel:v0.<span style="color: rgba(128, 0, 128, 1)">14.0</span><span style="color: rgba(0, 0, 0, 1)">
command:
</span>- <span style="color: rgba(0, 0, 255, 1)">cp</span><span style="color: rgba(0, 0, 0, 1)">
args:
</span>- -<span style="color: rgba(0, 0, 0, 1)">f
</span>- /etc/kube-flannel/cni-<span style="color: rgba(0, 0, 0, 1)">conf.json
</span>- /etc/cni/net.d/<span style="color: rgba(128, 0, 128, 1)">10</span>-<span style="color: rgba(0, 0, 0, 1)">flannel.conflist
volumeMounts:
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: cni
mountPath: </span>/etc/cni/<span style="color: rgba(0, 0, 0, 1)">net.d
</span>- name: flannel-<span style="color: rgba(0, 0, 0, 1)">cfg
mountPath: </span>/etc/kube-flannel/<span style="color: rgba(0, 0, 0, 1)">
containers:
</span>- name: kube-<span style="color: rgba(0, 0, 0, 1)">flannel
image: quay.io</span>/coreos/flannel:v0.<span style="color: rgba(128, 0, 128, 1)">14.0</span><span style="color: rgba(0, 0, 0, 1)">
command:
</span>- /opt/bin/<span style="color: rgba(0, 0, 0, 1)">flanneld
args:
</span>- --ip-<span style="color: rgba(0, 0, 0, 1)">masq
</span>- --kube-subnet-<span style="color: rgba(0, 0, 0, 1)">mgr
resources:
requests:
cpu: </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)">
memory: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">50Mi</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
limits:
cpu: </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)">
memory: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">50Mi</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
securityContext:
privileged: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
capabilities:
add: [</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">NET_ADMIN</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)">NET_RAW</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)">env</span><span style="color: rgba(0, 0, 0, 1)">:
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: run
mountPath: </span>/run/<span style="color: rgba(0, 0, 0, 1)">flannel
</span>- name: flannel-<span style="color: rgba(0, 0, 0, 1)">cfg
mountPath: </span>/etc/kube-flannel/<span style="color: rgba(0, 0, 0, 1)">
volumes:
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: run
hostPath:
path: </span>/run/<span style="color: rgba(0, 0, 0, 1)">flannel
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: cni
hostPath:
path: </span>/etc/cni/<span style="color: rgba(0, 0, 0, 1)">net.d
</span>- name: flannel-<span style="color: rgba(0, 0, 0, 1)">cfg
configMap:
name: kube</span>-flannel-cfg</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>更改 128行的网络配置,要和 pod-network-cidr保持一致</p>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825144252156-1502977434.png" alt=""></p>
<p> 然后执行yaml文件</p>
<div class="cnblogs_code">
<pre>kubectl apply -f kube-flannel.yaml</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825144402629-2030245425.png" alt=""></p>
<h3> 2.查看flannel部署结果</h3>
<div class="cnblogs_code">
<pre>kubectl -n kube-system get pods -o wide</pre>
</div>
<p> <img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825152111426-529239626.png" alt=""></p>
<h3> 3.查看各个node的状态</h3>
<div class="cnblogs_code">
<pre>kubectl get nodes</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825144608475-271611428.png" alt=""></p>
<h3> 4. 修改集群kube-proxy的模式为iptables</h3>
<p><span style="color: rgba(255, 0, 0, 1)">由于 k8s 1.18对内核版本要求比较高,3.10的内核部署1.18.8使用ipvs模式会存在coredns无法解析等问题。股在此采用iptables模式。 如果你服务内核4+起,则采用iptables 和ipvs均可。 </span></p>
<div class="cnblogs_code">
<pre>kubectl get cm kube-proxy -n kube-system -o yaml | <span style="color: rgba(0, 0, 255, 1)">sed</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">s/mode: ""/mode: "iptables"/</span><span style="color: rgba(128, 0, 0, 1)">'</span> | kubectl apply -f -<span style="color: rgba(0, 0, 0, 1)">
kubectl </span>-n kube-system rollout restartdaemonsets.appskube-<span style="color: rgba(0, 0, 0, 1)">proxy
kubectl </span>-n kube-system rollout restartdaemonsets.appskube-flannel-ds</pre>
</div>
<h4>升级内核可参考:https://www.cnblogs.com/Sunzz/p/15624582.html</h4>
<h2>八.部署busybox来测试集群各网络情况</h2>
<p>busybox.yaml</p>
<div class="cnblogs_code">
<pre>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: apps</span>/<span style="color: rgba(0, 0, 0, 1)">v1
kind: Deployment
metadata:
name: busybox
spec:
replicas: </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
selector:
matchLabels:
name: busybox
template:
metadata:
labels:
name: busybox
spec:
containers:
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: busybox
image: busybox
imagePullPolicy: IfNotPresent
args:
</span>- /bin/<span style="color: rgba(0, 0, 255, 1)">sh</span>
- -<span style="color: rgba(0, 0, 0, 1)">c
</span>- <span style="color: rgba(0, 0, 255, 1)">sleep</span> <span style="color: rgba(128, 0, 128, 1)">1</span>; <span style="color: rgba(0, 0, 255, 1)">touch</span> /tmp/healthy; <span style="color: rgba(0, 0, 255, 1)">sleep</span> <span style="color: rgba(128, 0, 128, 1)">30000</span><span style="color: rgba(0, 0, 0, 1)">
readinessProbe:
exec:
command:
</span>- <span style="color: rgba(0, 0, 255, 1)">cat</span>
- /tmp/<span style="color: rgba(0, 0, 0, 1)">healthy
initialDelaySeconds: </span><span style="color: rgba(128, 0, 128, 1)">1</span> </pre>
</div>
<div class="cnblogs_code">
<pre>kubectl apply -f busybox.yaml </pre>
</div>
<h3>1.查看集群所有pod ip 和service ip</h3>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825151310656-476256233.png" alt=""></p>
<h3>2.跨node的pods是否互通</h3>
<div class="cnblogs_code">
<pre>kubectl exec -it busybox-7c84546778-h6t2d -- /bin/sh</pre>
</div>
<p> 10.245.2.6 为另一个busybox pod的ip</p>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825151423752-329972911.png" alt=""></p>
<h3>3. pod 和各node是否互通</h3>
<p>在pod里面分别ping 各node的ip</p>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825145454043-182700170.png" alt=""></p>
<h3>4.pod 和service 的网络</h3>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825151619685-1404850750.png" alt=""></p>
<h3>5.测试core-dns是否正常</h3>
<p><img src="https://img2020.cnblogs.com/blog/1157397/202108/1157397-20210825151525216-1187608259.png" alt=""></p>
<h3><strong>转载请在文章开头附上原文链接地址:</strong> https://www.cnblogs.com/Sunzz/p/15184167.html</h3>
<h2>九,部署metrics-server、nginx-ingress</h2>
<h3> 1.部署nginx-ingress</h3>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_f55ae091-ad09-40bb-9fdb-47a2014a0e4f" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 0, 1)">apiVersion: v1
kind: Namespace
metadata:
name: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: v1
kind: ServiceAccount
metadata:
name: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
namespace: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: v1
kind: Secret
metadata:
name: default</span>-server-<span style="color: rgba(0, 0, 0, 1)">secret
namespace: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
type: Opaque
data:
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURWekNDQWorZ0F3SUJBZ0lKQUtaRTllUmZaRlJSTUEwR0NTcUdTSWIzRFFFQkN3VUFNRUl4SHpBZEJnTlYKQkFNTUZrNUhTVTVZU1c1bmNtVnpjME52Ym5SeWIyeHNaWEl4SHpBZEJnTlZCQW9NRms1SFNVNVlTVzVuY21WegpjME52Ym5SeWIyeHNaWEl3SGhjTk1qRXdNVEkxTURjeE9USTRXaGNOTXpFd01USXpNRGN4T1RJNFdqQkNNUjh3CkhRWURWUVFEREJaT1IwbE9XRWx1WjNKbGMzTkRiMjUwY205c2JHVnlNUjh3SFFZRFZRUUtEQlpPUjBsT1dFbHUKWjNKbGMzTkRiMjUwY205c2JHVnlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQQp0M1hVcFhYcUdDUTJBblRTd21DMjZ1bzRudGhmQWNYd3U4REdLUVlBSGQ1VlFKaDRPdStSWEJ4M1BTMVlTY3VNCmVTVXExV1R1ejQzRW9tRHZOWkdHcmNkSlJrWDhjYk05WWNBanlWZ0pnd0cxVFB0OUl2ZzVibWJBWE1INnR3OTUKRGJiOFFlSWVSeXBUWVl6bXJmMnJxaU45aXdROUMzSHhySDc3ektoZ1hxT20vZ09CdGpWRVhKc3lSeEpTcUdJZQpiNUp6NENJK0FzaUZGYWRjMHZhcmpvei8wTTJuS1JaU3VUQThmRHhsMUpTZlVJc2hYWUt1YmZvMzh0ck1paHFoCnh2Q09SMWFJUmxPaDNDTXAyekRoUm9nNHpjTFdyUHBXQnlyVkN2aGVBWWp2MitpWHlTQ1MyU2pRbmV4UE43aWoKUE5Kc0hpZVZMdVE0R0VCYTJ3RkxFUUlEQVFBQm8xQXdUakFkQmdOVkhRNEVGZ1FVSllDdmVtZFpFQVM4eGIxUAo3bVo3YjBGRFViZ3dId1lEVlIwakJCZ3dGb0FVSllDdmVtZFpFQVM4eGIxUDdtWjdiMEZEVWJnd0RBWURWUjBUCkJBVXdBd0VCL3pBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQW1Nc2QwbVRtaFBXc2pvejh0NUN2dTdXMVNhT2EKTzRQTlRNakJ3eEpHZUt1ZUlGNytSZWR3WUVaWXJ0M1hiY0NHRDAxMklFMjNJK1k0eWs4ekFkdWxtMmtZRUdPZQp6UDQyRGpCcFpZelhiUmpkQkY0aVFlMWR6K0xVWGJyK096bWFoRjMwOW5MVU5KVStNTStHbVVUbmlwdy90dGxnCkszNlI3WWpuSzNpelhqaE8rdFJvWnp5eWhsdDRVcmQxYTN0Tkxacy8yNk14akZ2aGlOWUNNSmh4blMzUlVzWXYKdllxUUw0WkQ1b0VaTVIvUEN3VlR3OHpTUEVuU0hlMnFLT2dmZGlOYTEwTHpYYzc0eGNmK2FZTmlvcndNdEpXdwo5NnR1WExUN3ZNMW11Ky9oM3BCR0RaMFY3SitwZTlvV2daZSsrNVVINyswK2tpSlN5S1VCN29LMHN3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ</span>==<span style="color: rgba(0, 0, 0, 1)">
tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRQzNkZFNsZGVvWUpEWUMKZE5MQ1lMYnE2amllMkY4QnhmQzd3TVlwQmdBZDNsVkFtSGc2NzVGY0hIYzlMVmhKeTR4NUpTclZaTzdQamNTaQpZTzgxa1lhdHgwbEdSZnh4c3oxaHdDUEpXQW1EQWJWTSszMGkrRGx1WnNCY3dmcTNEM2tOdHZ4QjRoNUhLbE5oCmpPYXQvYXVxSTMyTEJEMExjZkdzZnZ2TXFHQmVvNmIrQTRHMk5VUmNtekpIRWxLb1loNXZrblBnSWo0Q3lJVVYKcDF6UzlxdU9qUC9RemFjcEZsSzVNRHg4UEdYVWxKOVFpeUZkZ3E1dCtqZnkyc3lLR3FIRzhJNUhWb2hHVTZIYwpJeW5iTU9GR2lEak53dGFzK2xZSEt0VUsrRjRCaU8vYjZKZkpJSkxaS05DZDdFODN1S004MG13ZUo1VXU1RGdZClFGcmJBVXNSQWdNQkFBRUNnZ0VBQlAvbkRhTksvK0ZzdjJCanBmeHd2N0ltWE4zVXFQMjE4OGZySG84VlRic1QKWTdGRUJZY2wxUGJKb1JjdFFzV1RUSEhnMnZQbk5pek00UWYzUE9SOFlSdi9PVFVMRGlZdVZBMmliQWhFS2hmUAowd3MvZThaNytqQStxY2gzaHFtYlNPNWxyWDMyQ1VaMEEwS052c3djODRRSUZkUEZ2aHdhMC9LWjloZlltSHVkCmFOcGcvbzJuS3dSUVJSYjZYVkpsWWNjTHcvMmE1VzdQMGM0NENWWnI0VDh5MEErWHBUaTF3YUh6VlloQTZOc1QKemE1emJBS3ljMjZ2NWRhQ3VCT1JhYjkzWTFIUFRjOG9VRGIwR1VQa3BNd2dOaW9TV01rakNHRzBWWGtRUFE4NwplWlVteDNrbXNCVDF6RGtPR3pnNm9oSmlpSVQvcFhoVWVIckc1K0doWVFLQmdRRG5vUE0xQmNkeFArTGpMWDVrCnJqamxuSzA3SlQ3N0RlZ0o4VmtUQU90VDQ2cmJVUGxTT0VQTEV4ZUF6dnBkM3VWNkYwa1dYcDI0L0oydlZrSXcKTklQOWJxZ0RQYzBldFdhT0hLMHloanRuM1N1VTJreGtaQTBGN3lHNEFnTzU5SlZidWNnYWpVOStKcDc0TEdHTQprVmUrc09WMGlNVDRmWGMyQzJLUWJtNlduUUtCZ1FES3cyL0lyM25ucUI0dU44bFVSdUZ6MnBNQytTK3RLZlFVCi8xSEFSODAvRDZOYU5xdGhKcXFLd015Z091OGVjcTBMVUhFdm43T1ZyTk9aYzBHcktFQzJnTjF6YXRXVURHcWYKY3J5NnovRjVVQVkwOTI5K004bUJMeWFKeldudWtYaUUwcURlQ2p0cDh4Y3hiZnJOZ1JBU1h3NytudW1jb0RxUAoxb0dSMnQyaUJRS0JnUUNRS1U5Vlg5eHFzdDF1a1VFS1Bwanc1NXUxcFEvV3h5ZjFFRDVsSW54VXdPejFCU2UzCnNZY1lIRERUblg2YjcvK1pCbWNad2hlZUs3T2tqaVl4eEcybHpUcEtraXRaQW9QcXpSUkt6dHFvWVRJZnVlSXoKMVVWNXZRU2FkcjZFL1NIOGJkdUtFd3MzczZmYlJCd09sZU1ycndPUWpSTXlxVHdKNmZvVmRIWGx6UUtCZ0RCUwp3WnBmajdzUkN4aFN2VTJ6a3Rtc2x1clhmbkJUbGxOR3dqSUVLcnREdTlldFBjenFqU3lDWklJdmFYdWxNdTZHClhtTk9PVnVMaytaM1hJZ3hFTE11SlJqenRqRVJnSHU5dVpNQUtmbVNnOWd0dkVta2gvcWN4UitFY0NHbVU4VzcKK1JEUitYVDN0V2hYWUxXSGM5QWREWkxMUnJ2SVNBeXR2N1dHSnRvTkFvR0JBSlJPMzhxOVhuRHZBeEVRUzdpWgphd2dOWFA2TnBiSnVIeUo0cDJ4VldIV0N4VDhrL0E3eDVrb0FrTEpudTUvRE10d0pVL09ZRUpPY1k1b0l2UUVsCnAybWkxM3dEcVpvNml4d2kvU3h5T2xRQ2ZmNHBjNTlTUzE1WVM1RGVEeVVuakcwNTNha2VyQ3R5TGQ4Z2xnOUYKSTE2Y05TQXdTbDFvVi9KM21qOGdzZHpmCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0</span>=
---<span style="color: rgba(0, 0, 0, 1)">
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">config
namespace: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
data:
client</span>-max-body-size: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">0</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
server</span>-names-hash-bucket-size: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">1024</span><span style="color: rgba(128, 0, 0, 1)">"</span>
---<span style="color: rgba(0, 0, 0, 1)">
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1beta1
metadata:
name: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
rules:
</span>-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>- <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
resources:
</span>-<span style="color: rgba(0, 0, 0, 1)"> services
</span>-<span style="color: rgba(0, 0, 0, 1)"> endpoints
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> get
</span>-<span style="color: rgba(0, 0, 0, 1)"> list
</span>-<span style="color: rgba(0, 0, 0, 1)"> watch
</span>-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>- <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
resources:
</span>-<span style="color: rgba(0, 0, 0, 1)"> secrets
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> get
</span>-<span style="color: rgba(0, 0, 0, 1)"> list
</span>-<span style="color: rgba(0, 0, 0, 1)"> watch
</span>-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>- <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
resources:
</span>-<span style="color: rgba(0, 0, 0, 1)"> configmaps
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> get
</span>-<span style="color: rgba(0, 0, 0, 1)"> list
</span>-<span style="color: rgba(0, 0, 0, 1)"> watch
</span>-<span style="color: rgba(0, 0, 0, 1)"> update
</span>-<span style="color: rgba(0, 0, 0, 1)"> create
</span>-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>- <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
resources:
</span>-<span style="color: rgba(0, 0, 0, 1)"> pods
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> list
</span>-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>- <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
resources:
</span>-<span style="color: rgba(0, 0, 0, 1)"> events
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> create
</span>- <span style="color: rgba(0, 0, 255, 1)">patch</span>
-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>-<span style="color: rgba(0, 0, 0, 1)"> extensions
resources:
</span>-<span style="color: rgba(0, 0, 0, 1)"> ingresses
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> list
</span>-<span style="color: rgba(0, 0, 0, 1)"> watch
</span>-<span style="color: rgba(0, 0, 0, 1)"> get
</span>-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">extensions</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
resources:
</span>- ingresses/<span style="color: rgba(0, 0, 0, 1)">status
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> update
</span>-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>-<span style="color: rgba(0, 0, 0, 1)"> k8s.nginx.org
resources:
</span>-<span style="color: rgba(0, 0, 0, 1)"> virtualservers
</span>-<span style="color: rgba(0, 0, 0, 1)"> virtualserverroutes
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> list
</span>-<span style="color: rgba(0, 0, 0, 1)"> watch
</span>-<span style="color: rgba(0, 0, 0, 1)"> get
</span>---<span style="color: rgba(0, 0, 0, 1)">
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1beta1
metadata:
name: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
subjects:
</span>-<span style="color: rgba(0, 0, 0, 1)"> kind: ServiceAccount
name: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
namespace: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
roleRef:
kind: ClusterRole
name: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
apiGroup: rbac.authorization.k8s.io
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: apps</span>/<span style="color: rgba(0, 0, 0, 1)">v1
kind: DaemonSet
metadata:
name: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
namespace: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
annotations:
prometheus.io</span>/scrape: <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><span style="color: rgba(0, 0, 0, 1)">
prometheus.io</span>/port: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">9113</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
spec:
selector:
matchLabels:
app: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
template:
metadata:
labels:
app: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
spec:
serviceAccountName: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
containers:
</span>- image: nginx/nginx-ingress:<span style="color: rgba(128, 0, 128, 1)">1.5</span>.<span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">
imagePullPolicy: IfNotPresent
name: nginx</span>-<span style="color: rgba(0, 0, 0, 1)">ingress
ports:
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: http
containerPort: </span><span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">
hostPort: </span><span style="color: rgba(128, 0, 128, 1)">80</span>
-<span style="color: rgba(0, 0, 0, 1)"> name: https
containerPort: </span><span style="color: rgba(128, 0, 128, 1)">443</span><span style="color: rgba(0, 0, 0, 1)">
hostPort: </span><span style="color: rgba(128, 0, 128, 1)">443</span>
-<span style="color: rgba(0, 0, 0, 1)"> name: prometheus
containerPort: </span><span style="color: rgba(128, 0, 128, 1)">9113</span>
<span style="color: rgba(0, 0, 255, 1)">env</span><span style="color: rgba(0, 0, 0, 1)">:
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
args:
</span>- -nginx-configmaps=$(POD_NAMESPACE)/nginx-<span style="color: rgba(0, 0, 0, 1)">config
</span>- -default-server-tls-secret=$(POD_NAMESPACE)/default-server-<span style="color: rgba(0, 0, 0, 1)">secret
</span>- -enable-prometheus-metrics</pre>
</div>
<span class="cnblogs_code_collapse">nginx-ingress.yaml</span></div>
<div class="cnblogs_code">
<pre>kubectl apply -fnginx-ingress.yaml</pre>
</div>
<h3>2.部署metrics-server</h3>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_61f7823e-6251-4749-91e0-2a6490c4dba8" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 0, 1)">apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
name: metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: rbac.authorization.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1
kind: ClusterRole
metadata:
labels:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
rbac.authorization.k8s.io</span>/aggregate-to-admin: <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><span style="color: rgba(0, 0, 0, 1)">
rbac.authorization.k8s.io</span>/aggregate-to-edit: <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><span style="color: rgba(0, 0, 0, 1)">
rbac.authorization.k8s.io</span>/aggregate-to-view: <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><span style="color: rgba(0, 0, 0, 1)">
name: system:aggregated</span>-metrics-<span style="color: rgba(0, 0, 0, 1)">reader
rules:
</span>-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>-<span style="color: rgba(0, 0, 0, 1)"> metrics.k8s.io
resources:
</span>-<span style="color: rgba(0, 0, 0, 1)"> pods
</span>-<span style="color: rgba(0, 0, 0, 1)"> nodes
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> get
</span>-<span style="color: rgba(0, 0, 0, 1)"> list
</span>-<span style="color: rgba(0, 0, 0, 1)"> watch
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: rbac.authorization.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1
kind: ClusterRole
metadata:
labels:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
name: system:metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
rules:
</span>-<span style="color: rgba(0, 0, 0, 1)"> apiGroups:
</span>- <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
resources:
</span>-<span style="color: rgba(0, 0, 0, 1)"> pods
</span>-<span style="color: rgba(0, 0, 0, 1)"> nodes
</span>- nodes/<span style="color: rgba(0, 0, 0, 1)">stats
</span>-<span style="color: rgba(0, 0, 0, 1)"> namespaces
</span>-<span style="color: rgba(0, 0, 0, 1)"> configmaps
verbs:
</span>-<span style="color: rgba(0, 0, 0, 1)"> get
</span>-<span style="color: rgba(0, 0, 0, 1)"> list
</span>-<span style="color: rgba(0, 0, 0, 1)"> watch
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: rbac.authorization.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1
kind: RoleBinding
metadata:
labels:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
name: metrics</span>-server-auth-<span style="color: rgba(0, 0, 0, 1)">reader
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: extension</span>-apiserver-authentication-<span style="color: rgba(0, 0, 0, 1)">reader
subjects:
</span>-<span style="color: rgba(0, 0, 0, 1)"> kind: ServiceAccount
name: metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: rbac.authorization.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1
kind: ClusterRoleBinding
metadata:
labels:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
name: metrics</span>-server:system:auth-<span style="color: rgba(0, 0, 0, 1)">delegator
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:auth</span>-<span style="color: rgba(0, 0, 0, 1)">delegator
subjects:
</span>-<span style="color: rgba(0, 0, 0, 1)"> kind: ServiceAccount
name: metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: rbac.authorization.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1
kind: ClusterRoleBinding
metadata:
labels:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
name: system:metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
subjects:
</span>-<span style="color: rgba(0, 0, 0, 1)"> kind: ServiceAccount
name: metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: v1
kind: Service
metadata:
labels:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
name: metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
spec:
ports:
</span>-<span style="color: rgba(0, 0, 0, 1)"> name: https
port: </span><span style="color: rgba(128, 0, 128, 1)">443</span><span style="color: rgba(0, 0, 0, 1)">
protocol: TCP
targetPort: https
selector:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: apps</span>/<span style="color: rgba(0, 0, 0, 1)">v1
kind: Deployment
metadata:
labels:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
name: metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
spec:
replicas: </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
selector:
matchLabels:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
strategy:
rollingUpdate:
maxUnavailable: </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
template:
metadata:
labels:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
spec:
containers:
</span>-<span style="color: rgba(0, 0, 0, 1)"> args:
</span>- --cert-<span style="color: rgba(0, 0, 255, 1)">dir</span>=/<span style="color: rgba(0, 0, 0, 1)">tmp
</span>- --secure-port=<span style="color: rgba(128, 0, 128, 1)">443</span>
- --kubelet-preferred-address-types=<span style="color: rgba(0, 0, 0, 1)">InternalIP,ExternalIP,Hostname
</span>- --kubelet-use-node-status-<span style="color: rgba(0, 0, 0, 1)">port
</span>- --metric-resolution=<span style="color: rgba(0, 0, 0, 1)">15s
# 跳过tls,解决cannot validate certificate </span><span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">65.3</span><span style="color: rgba(0, 0, 0, 1)"> because it doesn’t contain any IP SANs报错
</span>- --kubelet-insecure-<span style="color: rgba(0, 0, 0, 1)">tls
image: k8s.gcr.io</span>/metrics-server/metrics-server:v0.<span style="color: rgba(128, 0, 128, 1)">5.0</span><span style="color: rgba(0, 0, 0, 1)">
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: </span><span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">
httpGet:
path: </span>/<span style="color: rgba(0, 0, 0, 1)">livez
port: https
scheme: HTTPS
periodSeconds: </span><span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">
name: metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
ports:
</span>- containerPort: <span style="color: rgba(128, 0, 128, 1)">443</span><span style="color: rgba(0, 0, 0, 1)">
name: https
protocol: TCP
readinessProbe:
failureThreshold: </span><span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">
httpGet:
path: </span>/<span style="color: rgba(0, 0, 0, 1)">readyz
port: https
scheme: HTTPS
initialDelaySeconds: </span><span style="color: rgba(128, 0, 128, 1)">20</span><span style="color: rgba(0, 0, 0, 1)">
periodSeconds: </span><span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">
resources:
requests:
cpu: 100m
memory: 200Mi
securityContext:
readOnlyRootFilesystem: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
runAsNonRoot: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
runAsUser: </span><span style="color: rgba(128, 0, 128, 1)">1000</span><span style="color: rgba(0, 0, 0, 1)">
volumeMounts:
</span>- mountPath: /<span style="color: rgba(0, 0, 0, 1)">tmp
name: tmp</span>-<span style="color: rgba(0, 0, 255, 1)">dir</span>
- mountPath: /etc/<span style="color: rgba(0, 0, 0, 1)">localtime
name: host</span>-<span style="color: rgba(0, 0, 255, 1)">time</span><span style="color: rgba(0, 0, 0, 1)">
nodeSelector:
kubernetes.io</span>/<span style="color: rgba(0, 0, 0, 1)">os: linux
priorityClassName: system</span>-cluster-<span style="color: rgba(0, 0, 0, 1)">critical
serviceAccountName: metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
volumes:
</span>-<span style="color: rgba(0, 0, 0, 1)"> emptyDir: {}
name: tmp</span>-<span style="color: rgba(0, 0, 255, 1)">dir</span>
- name: host-<span style="color: rgba(0, 0, 255, 1)">time</span><span style="color: rgba(0, 0, 0, 1)">
hostPath:
path: </span>/etc/<span style="color: rgba(0, 0, 0, 1)">localtime
</span>---<span style="color: rgba(0, 0, 0, 1)">
apiVersion: apiregistration.k8s.io</span>/<span style="color: rgba(0, 0, 0, 1)">v1
kind: APIService
metadata:
labels:
k8s</span>-app: metrics-<span style="color: rgba(0, 0, 0, 1)">server
name: v1beta1.metrics.k8s.io
spec:
group: metrics.k8s.io
groupPriorityMinimum: </span><span style="color: rgba(128, 0, 128, 1)">100</span><span style="color: rgba(0, 0, 0, 1)">
insecureSkipTLSVerify: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
service:
name: metrics</span>-<span style="color: rgba(0, 0, 0, 1)">server
namespace: kube</span>-<span style="color: rgba(0, 0, 0, 1)">system
version: v1beta1
versionPriority: </span><span style="color: rgba(128, 0, 128, 1)">100</span></pre>
</div>
<span class="cnblogs_code_collapse">metrics-server</span></div>
<div class="cnblogs_code">
<pre>kubectl apply -f metrics-server.yaml</pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/Sunzz/p/15184167.html
頁:
[1]