模拟题目:

设置配置环境:

[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: {}

file

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可以在文件中其他行拷贝,考试时如果存在则需要检查是否正确进行修改,重复添加会报错 file

应用yaml文件 并检查

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

file

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

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

file