CKA

记录刷题- -

Job:创建一个固定结束次数的并行 Job,共 2 个 pod,运行 45 completion,Job pod 打印“Beijing”,镜像自选。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: batch/v1
kind: Job
metadata:
name: job
spec:
parallelism: 2
completions: 45
restartPolicy: Never
template:
metadata:
name: job
spec:
containers:
- name: job
image: busybox:latest
command:
- 'sh'
- '-c'
- 'echo Beijing'

initContainer:pod 的 container 在启动时会检查 volume 中某个目录是否存在某个文件,若不存在则退出,若存在,则运行。要求修改 pod 的 yaml,通过 initContainer 创建该文件,使pod运行。

1

将名为 ek8s-node-1 的 node 设置为不可用,并重新调度该 node 上所有运行的 pods。

1
2
3
4
# cordon:将node设置为不可用,将阻止新pod调度到该节点之上,但不会影响任何已经在其上的 pod,这是重启节点或者执行其他维护操作之前的一个有用的准备步骤,DaemonSet创建的pod能够容忍节点的不可调度属性。
kubectl cordon ek8s-node-1
# drain:从节点安全的驱逐所有pods。
kubectl drain ek8s-node-1 --delete-local-data --ignore-daemonsets --force

在现有的 namespace app-team1 中创建一个名为 cicd-token 的新 ServiceAccount,创建一个 deployment-clusterrole 且只能够创建 Deployment、DaemonSet、StatefulSet 资源的 Cluster Role,并将新的 deployment-clusterrole 绑定到 cicd-token。

1
2
3
4
5
kubectl create sa cicd-token -n app-team1

kubectl create clusterrole deployment-clusterrole --verb=create --resource=Deployment,StatefulSet,DaemonSet

kubectl create rolebinding cicd-rolebinding --clusterrole=deployment-clusterrolr --serviceaccount=app-team1:cicd-token

k8s master 1.20.0 升级到 1.20.1,并升级 kubelet、kubectl。

1
2
3
4
5
6
7
8
9
10
# 将节点设为不可调度性
kubectl cordon mk8s-master-0
kubectl drain mk8s-master-0 --igonre-daemonsets
# 升级
apt-get update
apt-get -y install kubeadm=1.20.1-00
kubeadm update apply v1.20.1 --etcd-upgrade=false
apt-get -y install kubelet=1.20.1-00 kubectl=1.20.1-00
# 将不可调度性去除
kubectl uncordon mk8s-master-0

etcd 备份/恢复。

1
2
3
4
# 备份
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> snapshot save <backup-file-location>
# 恢复
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> snapshot restore <backup-file-location>

在 internal 的命名空间下创建一个名为 allow-port-from-namespace 的 NetworkPolicy,此 NetworkPolicy 允许 internal 中的 pod 访问 echo 命名空间中 9000 的端口。

1
2
3
# 先获取echo租户的labels
kubectl get ns echo --show-labels
echo-key: echo-value
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace
namespace: internal
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
echo-key: echo-value
ports:
- protocol: TCP
port: 9000

在 ing-internal 下创建一个 ingress 名为 ping,通过 5678 端口暴露 hello svc 下的 /hello。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ping
namespace: ing-internal
spec:
rules:
- http:
paths:
- path: /hello
backend:
service:
name: hello
port:
number: 5678

将 deployment webserver 扩展至 6 pods。

1
kubectl scale deployment webserver --replicas 6

创建一个名为 nginx-kusc00401 的 pod,镜像为 nginx,调度到 disk=ssd 的节点上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: Pod
metadata:
name: nginx-kusc00401
spec:
containers:
- name: nginx
image: nginx:1.20.1
imagePullPolicy: Always
ports:
- name: http
containerPort: 80
NodeSelector:
disk=ssd

将一个现有的 pod 集成到 k8s 内置日志记录体系结构中(kubectl logs),使用 busybox 来将名为 sidecar 容器添加到名为 11-factor-app 的 pod 中,sidecar 需运行 /bin/sh -c tail -n+1 -f /var/log/11-factor-app.log ,使用安装在 /var/log 的 volume,使日志文件 11-factor-app.log 可用于 sidecar 容器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
apiVersion: v1
kind: Pod
metadata:
name: 11-factor-app
spec:
volumes:
- name: log
emptyDir: {}
containers:
- name: count
image: busybox
command:
- /bin/sh
- -c
- >
i=0;
while true;
do
echo "$i: $(date)" >> /var/log/11-factor-app.log;
i=$((i+1));
sleep 1;
done
volumeMounts:
- name: log
mountPath: /var/log
- name: sidecar
image: busybox
command:
- /bin/sh
- -c
- 'tail -n+1 -f /var/log/11-factor-app.log'
volumeMounts:
- name: log
mountPath: /var/log

通过 pod label name=cpu-utilizer 寻找 cpu 占用最多的 pod,并写入 /opt/tmp/tmp.txt

1
kubectl top pod -A -l name=cpu-utilizer --sort-by=cpu >> /opt/tmp/tmp.txt
Author

Warner Chen

Posted on

2024-02-18

Updated on

2024-02-18

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.