模拟题目

设置配置环境:

[candidate@node-1] $ kubectl config use-context k8s

Task

  1. 更新在 namespace default 中的 Service nginxsvc 来暴露端口 9090
  2. 在 namespace default 中创建一个名为 haproxy-config 并存储着的/ckad/ambassador/haproxy.cfg 的内容的 ConfigMap。
  3. 更新在 namespace default 中名为 poller 的 Pod:
    • 首先,添加一个使用 haproxy:lts 镜像、暴露端口 80 并名为 ambassador-container 的 ambassador 容器(大使代理模式)。
    • 最后,ConfigMap haproxy-config 要挂载到 ambassador 容器 ambassador-container/usr/local/etc/haproxy/ 目录。

参考

https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/

挂载的例子

apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
configMap:
name: myconfigmap

解答

切换环境

kubectl config use-context k8s

1. 修改svc端口

kubectl -n default get svc
kubectl -n default edit svc nginxsvc
kubectl -n default get svc nginxsvc -owide
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"nginxsvc","namespace":"default"},"spec":{"ports":[{"port":80,"protocol":"TCP","targetPort":80}],"selector":{"app":"nginxsvc"}}}
creationTimestamp: "2023-05-24T13:45:01Z"
name: nginxsvc
namespace: default
resourceVersion: "17051"
uid: cd4c38bd-e282-414f-a4cb-9fe3a5ccd0c5
spec:
clusterIP: 10.111.178.212
clusterIPs:
- 10.111.178.212
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- port: 9090 #修改这里为题目要求
protocol: TCP
targetPort: 80
selector:
app: nginxsvc
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}

svc-configmap-sidecar-0

2. 使用文件创建configmap

kubectl -n default create configmap haproxy-config --from-file /ckad/ambassador/haproxy.cfg

3. 更新pod

kubectl -n default get pod poller -oyaml > poller.yaml
cp poller.yaml !$.bak 或者 cp poller.yaml $_.bak
kubectl delete -f poller.yaml
vim poller.yaml

添加或者修改 边车容器 和 configMap挂载, 格式可以从上面拷贝, port可以在文件中其他行拷贝,考试时如果存在则需要检查是否正确进行修改,重复添加会报错

svc-configmap-sidecar-1

应用yaml文件 并检查

#应用之前
kubectl -n default get svc -owide
curl 10.111.178.212:9090
#应用之后
kubectl apply -f poller.yaml
curl 10.111.178.212:9090

svc-configmap-sidecar-2

能访问到poller的原因是 svc里面有poller对应的标签

kubectl -n default get pod --show-labels 
kubectl -n default get svc -oyaml | grep -i selector -A3

svc-configmap-sidecar-3