练习题-3
# 课后练习题-3
# 理论练习(开放性试题)
涵盖第 5 章的内容。
- master 节点上静态 Pod 的 yaml 文件默认存储在哪个目录下?
- 修改静态 Pod 存储路径的方式有两种,是哪两种?
答案
- master 静态 Pod 的 yaml 文件默认存储于
/etc/kubernetes/manifests/
目录下。 - 修改静态 Pod 路径:
- 第一种——修改 kubelet 服务文件
/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
,在选项Environment="..."
后面添加参数--pod-manifest-path=<目录>
。 - 第二种——修改 k8s 配置文件
/var/lib/kubelet/config.yaml
,重新配置参数staticPodPath: <目录>
。
# 实操练习
涵盖第 5 的内容。
- 列出命名空间
kube-system
中的 Pod,并查看这些 Pod 是运行在哪些节点上的 - 列出所有 Pod 的负载信息,并按照内存使用率进行排序
- 计算所有命名空间中一共有多少个 Pod
- 创建命名空间
ns1
- 通过命令行创建一个 Pod,要求如下:
- 名称为
pod1
- 容器镜像为
nginx
- 镜像下载策略为
IfNotPresent
- 设置标签
run=dynamic
- 创建包含两个容器的 Pod,要求如下:
- 名称为
pod2
- 设置标签
run=dynamic
- 第一个容器名称为
c1
,镜像为nginx
- 第二个容器名称为
c2
,镜像为alpine
,创建该容器时运行命令echo "hello alpine" && sleep 999999
- 容器的镜像下载策略都为
IfNotPresent
- 将
pod1
的/etc/hosts
文件拷贝到物理机的当前目录中 - 查看
pod2
容器c2
的日志信息 - 在
pod2
容器c2
中执行命令ifconfig
- 切换至 worker01 节点,将静态 Pod 存储路径修改为
/opt/static-worker01/
。然后在 worker01 上创建一个静态 Pod,要求如下:
- 名称为
pod-static
- 命名空间为
ns1
- 设置标签
run=static
- 容器镜像为
nginx
- 镜像下载策略为
IfNotPresent
- 列出含有标签
run=dynamic
的所有 Pod,然后同时删除这些 Pod - 删除其余的 Pod
答案分隔线
答案分隔线
答案分隔线
答案分隔线
答案分隔线
答案分隔线
答案分隔线
答案分隔线
答案分隔线
# 实操练习答案
# 1. 列出命名空间kube-system
中的 Pod,并查看这些 Pod 是运行在哪些节点上的
kubectl get pods -n kube-system -o wide
1
# 2. 列出所有 Pod 的负载信息
kubectl top pods -A --sort-by=memory
1
# 3. 计算所有命名空间中一共有多少个 Pod
kubectl get pods -A -o name | wc -l
1
# 4. 创建命名空间ns1
kubectl create ns ns1
1
# 5. 通过命令行创建一个Pod
Pod 要求:
- 名称为
pod1
- 容器镜像为
nginx
- 镜像下载策略为
IfNotPresent
- 设置标签
run=dynamic
kubectl run pod1 --image nginx --image-pull-policy=IfNotPresent -l run=dynamic
1
# 6. 创建包含两个容器的 Pod
Pod 要求:
- 名称为
pod2
- 设置标签
run=dynamic
- 第一个容器名称为
c1
,镜像为nginx
- 第二个容器名称为
c2
,镜像为alpine
,创建该容器时运行命令echo "hello alpine" && sleep 999999
- 容器的镜像下载策略都为
IfNotPresent
# pod2.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod2
labels:
run: dynamic
spec:
containers:
- name: c1
image: nginx
imagePullPolicy: IfNotPresent
- name: c2
image: alpine
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'echo "hello alpine" && sleep 999999']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
kubectl apply -f pod2.yaml
1
# 7. 将pod1
的/etc/hosts
文件拷贝到物理机的当前目录中
kubectl cp pod1:/etc/hosts ./hosts
1
# 8. 查看pod2
容器c2
的日志信息
kubectl logs pod2 -c c2
1
# 9. 在pod2
容器c2
中执行命令ifconfig
kubectl exec pod2 -c c2 -- ifconfig
1
# 10. 修改worker01静态Pod存储路径,并创建静态Pod
手动打开文件修改:
- 方式一,打开文件
/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
,在选项Environment="..."
后面添加参数--pod-manifest-path=<目录>
- 方式二,打开文件
/var/lib/kubelet/config.yaml
,修改参数staticPodPath: <目录>
通过命令快捷修改:
sed -i ...
:将更改应用到文件中s/<原始内容>/<替换后的内容>/g
:s 是替换,g 是全局搜索
# 通过命令快捷修改
sed -i 's/staticPodPath: .*/staticPodPath: \/opt\/static-worker01\//g' /var/lib/kubelet/config.yaml
# 修改之后, 需要创建对应目录 并 重启服务
mkdir /opt/static-worker01
systemctl restart kubelet
1
2
3
4
5
6
2
3
4
5
6
Pod 要求:
- 名称为
pod-static
- 命名空间为
ns1
- 设置标签
run=static
- 容器镜像为
nginx
- 镜像下载策略为
IfNotPresent
# pod-static.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-static
namespace: ns1
labels:
run: static
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod-static
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
静态 Pod 无需通过 kubectl 创建,只要放到对应的存储目录中即可。
# worker01创建静态Pod
cp ./pod-static.yaml /opt/static-worker01/
# master查看
kubectl get pods -n ns1
1
2
3
4
5
2
3
4
5
# 11. 列出含有标签run=dynamic
的所有Pod,然后同时删除这些 Pod
kubectl get pods -l run=dynamic
kubectl delete pods -l run=dynamic --force
1
2
2
# 12. 删除其余的 Pod
只剩下 worker01 上的一个静态 Pod。
# worker01
rm -rf /opt/static-worker01/pod-static.yaml
1
2
2
编辑 (opens new window)