模拟题目:
设置配置环境:
[candidate@node-1] $ kubectl config use-context k8s
Task
- 更新在 namespace default 中的 Service nginxsvc 来暴露端口 9090。
- 在 namespace default 中创建一个名为 haproxy-config 并存储着的/ckad/ambassador/haproxy.cfg 的内容的 ConfigMap。
- 更新在 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: {}
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可以在文件中其他行拷贝,考试时如果存在则需要检查是否正确进行修改,重复添加会报错
应用yaml文件 并检查
#应用之前
kubectl -n default get svc -owide
curl 10.111.178.212:9090
#应用之后
kubectl apply -f poller.yaml
curl 10.111.178.212:9090
能访问到poller的原因是 svc里面有poller对应的标签
kubectl -n default get pod --show-labels
kubectl -n default get svc -oyaml | grep -i selector -A3