共计 10975 个字符,预计需要花费 28 分钟才能阅读完成。
本文由吴某人 吴某人の博客 公布!
本文由吴某人 吴某人の博客 公布!
<p> 本次测试的所有问题都必须在指定的 cluster 配置环境中实现。为尽量减少切换,零碎已对问题进行分组,同一 cluster 内的所有问题将间断显示。</p>
<img src=”https://s2.loli.net/2022/02/17/ecP2IraJRGdDUKz.png” alt=”file” />
<h2> 开启 TAB 补全 </h2>
<p> 做题前先配置 k8s 主动补齐性能,否则无奈 TAB 补全命令:</p>
<ol>
<li> 登陆治理节点 </li>
<li>kubectl --help | grep bash
, 此步是为了找关键词 completion
<img src=”https://s2.loli.net/2022/02/17/SokKF3NZmrta9QO.png” alt=”file” /></li>
<li>sudo vim /etc/profile
</li>
<li> 增加source <(kubectl completion bash)
<img src=”https://s2.loli.net/2022/02/17/KOgmhyZtC1o2T4P.png” alt=”file” />
5. 保留退出,source /etc/profile
</li>
</ol>
<h2>1.4% k8s</h2>
<pre>- 设置配置环境 kubectl config use-context k8s
Context
- 为部署管道创立一个新的 ClusterRole 并将其绑定到范畴为特定 namespace 的特定 ServiceAccount</pre>
<ul>
<li> 创立一个名字为 deployment-clusterrole 且仅容许 创立 以下资源类型的新 ClusterRole:
<ul>
<li>Deployment</li>
<li>StatefulSet</li>
<li>DaemonSet </li>
</ul></li>
<li> 在现有的 namespace app-team1 中创立有个名为 cicd-token 的新 ServiceAccount。</li>
<li> 限 于 namespace app-team1,将 新 的 ClusterRole deployment-clusterrole 绑 定 到 新 的 ServiceAccount cicd-token。</li>
</ul>
<h3> 解答:</h3>
<pre>1.kubectl create clusterrole deployment-clusterrole --verb=create --resource=Deployment,StatefulSet,DaemonSet
</pre>
2.kubectl create serviceaccount cicd-token -n app-team1
3.kubectl create rolebinding xxx(轻易起名字) --clusterrole=deployment-clusterrole --serviceaccount=cicd-token:app-team1 -n app-team1
<h2>2.4% ek8s</h2>
<pre>- 设置配置环境 kubectl config use-context ek8s
- 将名为 ek8s-node-0 (vms25)的 node 设置为不可用,并从新调度该 node 上所有运行的 pods </pre>
<h3> 解答:</h3>kubectl drain vms25.rhce.cc --ignore-daemonsets
<img src=”https://s2.loli.net/2022/02/17/Ehn6KwV7oDc4Sbs.png” alt=”file” />
<h2>3.7% mk8s</h2>
<pre>- 设置配置环境 kubectl config use-context mk8s
- 现有的 kubernetes 集群正在运行的版本是 1.21.0。仅将主节点上的所有 kubernetes 管制立体 和节点组件降级到版本 1.21.1。
- 另外,在主节点上降级 kubelet 和 kubectl。
[start-plane type=”4″]确保在降级前 drain 主节点,并在降级后 uncordon 主节点。请不要降级工作节点,etcd,container 管理器,CNI 插件,DNS 服务或任何其余插件。[/start-plane]–etcd-upgrade=false
kubeadm upgrade apply 1.21.1 –etcd-upgrade=false </pre>
<h3> 解答:</h3>
1. 登陆官网 k8s.io,能够右上角更换语言, 点击 Learn Kubernetes Basics
2. 搜寻 upgrade
<img src=”https://s2.loli.net/2022/02/17/RtyJhlKGDdg6UqN.png” alt=”file” />3. 开始降级, 步骤官网文档中都有步骤,步骤如下:
<pre>kubectl config use-context mk8s
</pre>
kubectl get nodes
ssh vms28(28 为 mk8s 的管制立体节点)
sudo su - (需用 root 用户执行下方命令)apt-get update && \ apt-get install -y --allow-change-held-packages kubeadm=1.21.1-00(装置 kubeadm 包)
<pre>kubeadm upgrade apply v1.21.1 –etcd-upgrade=false(题中提醒 etcd 不被降级,所以加前面的参数)
</pre>
kubectl drain vms28.rhce.cc --ignore-daemonsets (降级 kubelet 和 kubectl 前凌空节点,官网文档中流程都有,看着批改就好)apt-get update && \ apt-get install -y --allow-change-held-packages kubelet=1.21.1-00 kubectl=1.21.1-00(装置 kubelet 和 kubectl 包)
<pre>systemctl daemon-reload
</pre>
systemctl restart kubelet
kubectl uncordon vms28.rhce.cc
<h2>4.7%</h2>
<ul>
<li> 此我的项目无需更改配置环境 </li>
<li> 首 先 为 运 行 在 https://127.0.0.1:2379 上 的 现 有 etcd 实 例 创 建 快 照 并 将 快 照 保 存 到 /srv/data/etcd-snapshot.db。</li>
<li> 为给定实例创立快照预计能在几秒钟内实现。如果该操作仿佛挂起,则命令可能有问题。用 ctrl+c 来勾销操作,而后重试。</li>
<li> 而后还原位于 /srv/data/etcd-snapshot-previous.db 的现有先前快照.</li>
</ul>提供了一下 TLS 证书和密钥,以通过 etcdctl 连贯到服务器。CA 证书:/opt/KUIN00601/ca.crt 客户端证书: /opt/KUIN00601/etcd-client.crt 客户端密钥:/opt/KUIN00601/etcd-client.key
<h3> 解答:</h3>
<h4> 应用 root 账户操作 </h4>
etcdctl –help 查看是否有 snapshot 命令,有是版本 3 有为版本 2
<h4> 若是 2. 则手动导入 3 </h4>
export ETCDCTL_API=3
不晓得命令怎么写能够 etcdctl snapshot save –help
次要三个参数为:-–cacert,–cert,–key,–endpoints
<h4>1. 保留 etcd 实例快照:</h4>
考试环境:
<pre>#etcdctl snapshot save -–cacert=”/opt/KUIN00601/ca.crt”--cert=”/opt/KUIN00601/etcd-client.crt”--key=”/opt/KUIN00601/etcd-client.key”--endpoints="https://127.0.0.1:2379" -- /srv/data/etcd-snapshot.db
</pre>
练习环境:
<pre>#etcdctl snapshot save --endpoints="https://127.0.0.1:2379" /srv/data/etcd-snapshot.db
</pre>
<h4>2. 还原快照 </h4>
考试环境:
<pre>#etcdctl snapshot restore –cacert=”/opt/KUIN00601/ca.crt”--cert=”/opt/KUIN00601/etcd-client.crt”--key=”/opt/KUIN00601/etcd-client.key”/srv/data/etcd-snapshot.db
</pre>
练习环境:
<pre>#etcdctl snapshot restore /srv/data/etcd-snapshot.db
</pre>
<h2>5.7% k8s</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s
<ul>
<li> 在 internal 命名空间创立一个名为 allow-port-from-namespace 的确保新的 NetworkPolicy 允 许 namespace internal 中的 Pods 来连贯到 namespace big-corp 中的端口 9200。</li>
<li> 确保新的 NetworkPolicy:</li>
<li> 不容许对没有在监听端口 9200 的 pods 拜访 </li>
<li> 不容许不来自 namespace internal 的 pods 的拜访 </li>
</ul></li>
</ul>
<h3> 解答:</h3>
1. 先创立题中的命名空间(Namespace)
<pre>kubectl configuse-context k8s
</pre>
kubectl get namespace
kubectl create namespace internal
kubectl create namespace big-corp
kubectl label namespace big-corp name=big-corp
2. 关上官网,搜寻 ingress 或 egress 或 networkpolicy,而后第一个网络策略
<img src=”https://s2.loli.net/2022/02/17/AIL8mTv5fEOYZKz.png” alt=”file” />
<img src=”https://s2.loli.net/2022/02/17/cE4WFh3qJL7oQnD.png” alt=”file” />
3. 复制上方 yaml 代码,新建 yaml 文件,例如 networkpolicy.yaml,名字随便起
4. 将复制的代码依照题意改为下图所示:
<img src=”https://s2.loli.net/2022/02/17/eub7g963qHIFJvL.png” alt=”file” />
<pre>kubectl apply -f networkpolicy.yaml
</pre>
kubectl get networkpolicies.networking.k8s.io -n internal
<img src=”https://s2.loli.net/2022/02/17/3LiAzDSYZPjbcOU.png” alt=”file” />
<h2>6.7% k8s√</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s </li>
<li> 请重新配置现有的部署 front-end 以及增加名为 http 的端口标准来公开现有容器 nginx 的端 口 80/tcp。</li>
<li> 创立一个名为 front-end-svc 的新服务,以公开容器端口 http。配置此服务,以通过在排定的节点上的 NodePort 来公开各个 pods。</li>
</ul>
<h3> 解答:</h3>
<pre>kubectl config use-context k8s
</pre>
kubectl get deployments.apps
kubectl edit deployments.apps front-end(edit 编辑时只能应用空格,不要 TAB 否则保留不了)
<img src=”https://s2.loli.net/2022/02/18/4Xlqp7GiE1NwtyB.png” alt=”file” />
<pre>ports:
- name: http
containePort: 80
protocol: TCP
创立 front-end-svc 服务:
kubectl expose –-name=front-end-svc deployment front-end -–port=80 –-target-port=80 –-type=NodePort</pre>
<h2>7.7% k8s√</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s</li>
<li> 如下创立一个新的 nginx ingress 资源:</li>
<li> 名称:pong </li>
<li>namespace:ing-internal </li>
<li> 应用服务端口 5678 在门路 /hello 上公开服务 hello </li>
<li> 能够应用一下命令查看服务 hello 的可用性,该命令返回 hello:curl -kL < INTERNAL_IP>/hello/</li>
</ul>
<h3> 解答:</h3>
<pre>1.kubectl config use-context k8s
</pre>
2. 关上官网文档,搜寻 ingress, 抉择第一个后果即可,进入后复制 yaml 模板并新建一个 yaml 文件
3.vim ingress.yaml
<img src=”https://ae05.alicdn.com/kf/Hf18fccf94ea54a3bad6b9f8612aa5bf7G.png” alt=”file” />
<pre>4.kubectl apply -f 7-ing.yaml
</pre>
5.kubectl get ing -n ing-internal
<h2>8.4% k8s√</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s</li>
<li> 将 deployment 从 webserver 扩大至 6pods</li>
</ul>
<h3> 解答:</h3>
<pre>kubectl config use-context k8s
</pre>
kubectl get deploy
kubectl scale deployment webserver –-replicas=6
kubectl get deploy
<h2>9.4% k8s√</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s </li>
<li> 按如下要求调度一个 pod:</li>
<li> 名称:nginx-kusc00401 </li>
<li>image: nginx </li>
<li>Node selector: disk=ssd</li>
</ul>
<h3> 解答:</h3>
<pre>kubectl run nginx-kusc00401 --image=nginx --image-pull-policy=IfNotPresent --dry-run=client -o yaml > 9-pod.yaml
</pre>
退出如下标红代码
<img src=”https://s2.loli.net/2022/02/18/chTHrLpswCZAQV9.png” alt=”file” />
<pre>kubectl apply -f 9-pod.yaml
</pre>
kubectl get pods
<h2>10.4% k8s√</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s</li>
<li> 查看有多少个 worker nodes 已准备就绪(不包含被打上 Taint: NoSchedule 的节点),并将数 量写入 /opt/KUSC00402/kusc00402.txt</li>
</ul>
<h3> 解答:</h3>
<pre>Kubectl get nodes
</pre>
查看节点是否有污点
kubectl describe nodes vms22.rhce.cc | grep Taint
kubectl describe nodes vms23.rhce.cc | grep Taint
echo 1 > /opt/KUSC00402/kusc00402.txt
<img src=”https://s2.loli.net/2022/02/18/UsQowTXqFLBbktD.png” alt=”file” />
<h2>11.4% k8s√</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s </li>
<li> 创立一个名字为 kucc4 的 pod,在 pod 外面别离为以下每个 images 独自运行一个 app container(可能会有 1-4 个 images):</li>
<li>nginx+redis+memcached+consul</li>
</ul>
<h3> 解答:</h3>
<pre>kubectl run kucc4 1–image=nginx –1image-pull-policy=IfNotPresent –1dry-run=client -o yaml > 11-pod.yaml
</pre>
vim 11-pod.yaml(将图中标红项复制 3 次并批改 pod 名字即可)
<img src=”https://s2.loli.net/2022/02/18/oH9CVEuO1h6gtZm.png” alt=”file” />
<pre>kubectl apply -f 11-pod.yaml
</pre>
kubectl get pod
<h2>12.4% k8s√</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s </li>
<li> 创立名为 app-data 的 persistent volume,容量为 1Gi,拜访模式为 ReadWriteMany。volume 类型为 hostPath,位于 /srv/app-data</li>
</ul>
<h3> 解答:</h3>
1. 官网文档中搜寻 persistent volume,第一个案例即可
<img src=”https://s2.loli.net/2022/02/18/C3oAlTf9vgiXc5U.png” alt=”file” />
2.vim 12-pv.yaml, 依照题意批改
<img src=”https://s2.loli.net/2022/02/18/Kh2Pg35SZlJNpaC.png” alt=”file” />
3.kubectl apply -f 12-pv.yaml
4.kubectl get pv
<h2>13.7% k8s√</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s</li>
<li> 创立一个新的 PersistentVolumeClaim:
<ul>
<li> 名称:pvvolume </li>
<li>class:csi-hostpath-sc</li>
<li> 容量:10Mi</li>
</ul></li>
<li> 创立一个新的 pod,此 pod 将作为 volume 挂载到 PersistentVolumeClaim:
<ul>
<li> 名称:web-server </li>
<li>image: nginx </li>
<li> 挂载门路: /usr/share/nginx/html </li>
<li> 配置新的 pod,以对 volume 具备 ReadWriteOnce 权限。</li>
<li> 最初,应用 kubectl edit 或者 kubectl patch 将 PersistentVolumeClaim 的容量扩大为 70Mi,并 记录此次更改。</li>
</ul></li>
</ul>
<h3> 解答:</h3>kubectl config use-context k8s
持续在上题中的官网文档中找到下方案例:
<img src=”https://s2.loli.net/2022/02/18/fQNVU2iEuAIwMgO.png” alt=”file” />
<h5>vim 13-pvc.yaml, 讲案例复制,留神更改标红项,其余项删除(此步目标:创立新的 PersistentVolumeClaim)</h5>
<img src=”https://s2.loli.net/2022/02/18/ZFaf4vGr1QN7o5L.png” alt=”file” />kubectl apply -f 13-pvc.yaml
持续在上题的官网文档中下滑找到下方案例:
<img src=”https://s2.loli.net/2022/02/18/NOPu3XYefUvSD8z.png” alt=”file” />
<h5>vim 13-pvc-pod.yaml, 将案例复制(此步目标:创立一个新的 pod,此 pod 并挂载到 PersistentVolumeClaim)</h5>
<img src=”https://s2.loli.net/2022/02/18/QTiKyeprAfu41na.png” alt=”file” />kubectl apply -f 13-pvc-pod.yaml
<img src=”https://s2.loli.net/2022/02/18/XCK97M1rYeGDLTx.png” alt=”file” />
<h5>kubectl edit pvc pvvolume –-record,将 10Mi 改为 70Mi(–record 目标为记录此次更改,不加 –record 的话第三小题没有分数)</h5>
<img src=”https://s2.loli.net/2022/02/18/ZNHDVgbmF4fScKW.png” alt=”file” />
<h2>14.5% k8s √</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s </li>
<li> 监控 pod foo 的日志并:
<ul>
<li> 提取与谬误 unable-to-access-website 绝对应的日志行 </li>
<li> 将这些日志行写入到 /opt/KUTR00101/foo</li>
</ul></li>
</ul>
<h3> 解答:</h3>
<pre>$ kubectl config use-context k8s
</pre>
$ kubectl logs foo | grpe unable-to-access-website > /opt/KUTR00101/foo
<h2>15.7% k8s</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s
<ul>
<li> 在不更改其现有容器的状况下,须要将一个现有的 pod 集成到 kubernetes 的内置日志记录 体系结构中(例如 kubectl logs)。增加 streamimg sidecar 容器是实现此要求的一种好办法。</li>
<li> 将一个 busybox sidecar 容器增加到现有的 pod legacy-app。新的 sidecar 容器必须运行一下命令:/bin/sh -c tail -n+1 -f /var/log/legacy-app.log
</li>
<li> 应用名为 logs 的 volume mount 来让文件 /var/log/legacy-app.log 可用于 sidecar 容器。不要更改现有容器。不要批改日志文件的门路,两个容器必须通过 /var/log/legacy-app.log 来拜访该文件
</li>
</ul></li>
</ul>
<h3> 解答:</h3>
kubectl config use-context k8s
kubectl get pod legacy-app -o yaml > 15-pod.yaml
vim 15-pod.yaml
1. 增加 pod 及 vomuleMount 挂载点
<img src=”https://s2.loli.net/2022/02/18/jW4G1a65ZqtNz3B.png” alt=”file” />
2. 增加 volumes
<img src=”https://s2.loli.net/2022/02/18/CyXHYi2WrUGcNJB.png” alt=”file” />
3. 批改挂载目录及名称
<img src=”https://s2.loli.net/2022/02/18/7wIxAoKgSQV4iqC.png” alt=”file” />
4.kubectl apply -f 15-pod.yaml
5. 删除 legacy-app,否则再运行 yaml 时会提醒 legacy-app 已存在
kubectl delete pod legacy-app -–force
<img src=”https://s2.loli.net/2022/02/18/PfDqCSJ1syaYIp5.png” alt=”file” />
<h2>16.5% k8s√</h2>
<ul>
<li> 设置配置环境 kubectl config use-context k8s </li>
<li> 通过 pod label name=cpu-user,找到运行时占用大量 CPU 的 pod,并将占用 CPU 最高的 pod 名称写入到文件 /opt/KUTR000401/KUTR00401.txt(已存在)</li>
</ul>
<h3> 解答:</h3>
kubectl top pods -l name=cpu-user
echo “ 占比最高的机器名 ” > /opt/KUTR000401/KUTR00401.txt
<h2>17.13% ek8s</h2>
<ul>
<li> 设置配置环境 kubectl config use-context ek8s </li>
<li> 名为 wk8s-node-0(练习环境应用 vms26.rhce.cc) 的 kubernetes worker node 处于 Not Ready 状态。考察产生这种状况的起因,并采取相应措施将 node 复原为 Ready 状态,确保所做的任何更改永恒失效。</li>
<li> 可应用以下命令通过 ssh 连贯到故障 node:
<ul>
<li>ssh wk8s-node-0(vms26.rhce.cc)</li>
</ul></li>
<li> 可应用以下命令在该 node 上获取更高权限:
<ul>
<li>sudo -i</li>
</ul></li>
</ul>
<h3> 解答:</h3>
<pre>kubectl get nodes
</pre>
ssh vms26.rhce.cc
sudo -i
systemctl start kubelet ; systemctl enable kubectl
Exit 退出
$kubectl get nodes