Kubernetes入门实验:pod

作者注:本文仅为笔者学习记录,不具任何参考意义。

k8s pod 实验。
注:本文为笔者实验记录,非教程,另会不定时更新。

环境

1
2
3
4
5
# kubectl get node
NAME STATUS ROLES AGE VERSION
edge-node Ready <none> 15m v1.17.0
edge-node2 Ready <none> 16m v1.17.0
ubuntu Ready master 67d v1.17.0

pod

pod运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通。Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。

技术总结

创建yaml文件,指定数量。
测试扩容、缩容。
测试滚动升级。

测试yaml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# vim busybox-pod.yaml

apiVersion: v1
kind: Pod # 声明pod
metadata:
name: busybox-pod
spec:
containers:
- name: busybox-pod
image: latelee/busybox # 镜像名称,真实存在
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"

创建:

1
kubectl create -f busybox-pod.yaml

查看:

1
2
# kubectl get pod
busybox-pod 1/1 Running 0 9s

另外有命令:

1
2
3
kubectl get pod -o wide # 有pod运行的节点
kubectl get pod -o yaml # 更详细的信息
kubectl get pod -l app=busybox # 标签配套

停止:

1
kubectl delete -f busybox-pod.yaml

多个pod

示例如下,多了一个容器,并添加环境变量:

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
apiVersion: v1
kind: Pod # 声明pod
metadata:
name: busybox-pod
spec:
containers:
- name: busybox
image: latelee/busybox # 镜像名称,真实存在
imagePullPolicy: IfNotPresent
env:
- name: NAME
value: 'hello'
command:
- sleep
- "3600"

- name: busybox11
image: latelee/busybox:1.1
imagePullPolicy: IfNotPresent
env:
- name: NAME
value: 'world'
command:
- sleep
- "3600"

查看日志:

1
kubectl logs busybox-pod busybox

注:busybox-pod 为 pod 名称,busybox 为容器名称。(此处容器无输出)

执行某个容器命令:

1
2
# kubectl exec -it busybox-pod -c busybox cat version
# kubectl exec -it busybox-pod -c busybox11 cat version

另:

1
2
3
4
5
6
7
8
9
10
# kubectl exec -it busybox-pod -c busybox sh // 进入容器
/ # env // 查看环境变量
输出:
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=busybox-pod
HOME=/root
NAME=hello #!!! 自定义的
PWD=/
KUBERNETES_SERVICE_HOST=10.96.0.1

共享卷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
apiVersion: v1
kind: Pod
metadata:
name: busybox-pod
labels:
test: busybox
spec:
containers:
# 第一个容器
- name: hello-write
image: latelee/busybox
command: ["sh","-c","for i in {1..10};do echo $i >> /data/hello;sleep 1;done;sleep 5700"]
# 第二个容器
- name: hello-read
image: latelee/busybox
command: ["sh","-c","for i in {1..10};do cat $i >> /data/hello;sleep 1;done;sleep 5700"]
volumeMounts:
- name: data
mountPath: /data
# 数据卷
volumes:
- name: data
hostPath:
path: /data

端口映射

一个容器,多个端口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: latelee/lidch
ports:
- name: http
containerPort: 80
hostIP: 0.0.0.0
hostPort: 80
protocol: TCP
- name: https
containerPort: 443
hostIP: 0.0.0.0
hostPort: 443
protocol: TCP