1.编写资源清单
[root@master pod]# cat www.yaml
# 指定apiserver版本号
apiVersion: v1
# 指定资源的类型
kind: Pod
# 定义源数据信息
metadata:
# Pod的名称
name: pod-www
# 用户定义资源期望运行的状态
spec:
# 指定在worker232的工作节点运行
nodeName: worker232
# 在Pod内运行的容器定义
containers:
# 容器的名称
- name: c1
# 镜像名称
image: harbor.shuaige.com/shuaige-linux/alpine:latest
# 相当于Dockerfile的ENTRYPOINT指令,指定容器运行的命令
command: ["tail","-f","/etc/hosts"]
[root@master pod]# #运行指令
[root@master pod]# kubectl apply -f www.yaml
[root@master pod]# #查看pod
[root@master pod]# kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-www 1/1 Running 1 (15h ago) 15h
[root@master pod]#
[root@master pod]#
2.镜像下载策略
k8s在启动容器时,如何下载镜像的三种策略:
Always: k8s的默认策略,总是去拉取最新的镜像
如果本地镜像存在同名称的tag,其会取出该镜像的RepoDigests(镜像摘要)和远程仓库 的 RepoDigests进行比较
若比较结果相同,则直接使用本地缓存镜像,若比较结果不同,则会拉取远程仓库最新 的镜像
naver: 如果本地有镜像,则尝试启动容器;
如果本地没有镜像,则永远不会去拉取尝试镜像。
IfNotPresent: 如果本地有镜像,则尝试启动容器,并不会去拉取镜像。
如果本地没有镜像,则会去拉取镜像。
root@master pod]# cat www.yaml
# 指定apiserver版本号
apiVersion: v1
# 指定资源的类型
kind: Pod
# 定义源数据信息
metadata:
# Pod的名称
name: pod-www
# 用户定义资源期望运行的状态
spec:
# 指定在worker232的工作节点运行
nodeName: worker232
# 在Pod内运行的容器定义
containers:
# 容器的名称
- name: c1
# 镜像名称
image: harbor.shuaige.com/shuaige-linux/alpine:latest
# 镜像的拉取策略
imagePullPolicy: Always
# imagePullPolicy: Never
# imagePullPolicy: IfNotPresent
3.容器重启策略
Always:
容器退出时,始终重启容器(即创建新容器),默认策略。
Never:
容器退出时,不重启容器(即不创建新容器)。
OnFailure:
当容器异常退出时(kill -9时容器的退出码非0,貌似是137),重启容器(即创建新容器)。
当容器正常退出(docker stop,退出码为0)不重启容器。
#加入文件中
restartPolicy: Always
restartPolicy: Never
restartPolicy: OnFailure
4.资源限制
用于限制Pod,Namespace的资源,比如Pod内的某个容器资源使用cpu,内存等。
# 配置资源限制
resources:
# 指定容器期望资源,若满足不了,则无法完成调度
requests:
# 指定内存限制
memory: "200M"
# 1core=1000m
cpu: "250m"
# 指定资源的上限
limits:
memory: "500M"
# 表示使用1.5core,即1500m
cpu: 1.5
5.端口映射
# 指定pod的端口映射信息
ports:
# 容器的端口号
- containerPort: 3306
# 容器绑定到宿主机的IP地址,若不写表示"0.0.0.0"
hostIP: 10.0.0.233
# 映射的主机端口
hostPort: 13306
# 给服务起名字,要求唯一
name: db
# 指定协议
protocol: TCP
6.故障排查技巧
[root@master pod]# kubectl apply -f 06-pods-mysql-wordpress.yaml #错误
pod/oldboyedu-ports-02 unchanged
The Pod "oldboyedu-dp" is invalid: spec: Forbidden: pod updates may not change fields other than `spec.containers[*].image`, `spec.initContainers[*].image`, `spec.activeDeadlineSeconds`, `spec.tolerations` (only additions to existing tolerations) or `spec.terminationGracePeriodSeconds` (allow it to be set to 1 if it was previously negative)
core.PodSpec{
... // 9 identical fields
ServiceAccountName: "default",
AutomountServiceAccountToken: nil,
- NodeName: "workr232",
+ NodeName: "worker232",
SecurityContext: &{},
ImagePullSecrets: nil,
... // 17 identical fields
}
[root@master pod]# kubectl describe -f 06-pods-mysql-wordpress.yaml #查看
Name: oldboyedu-dp
Namespace: default
Priority: 0
Node: worker232/10.0.0.232
..... #省略
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Pulling 22m kubelet Pulling image "harbor.oldboyedu.com/oldboyedu-wordpress/wordpress:latest"
Normal Pulled 22m kubelet Successfully pulled image "harbor.oldboyedu.com/oldboyedu-wordpress/wordpress:latest" in 59.307828ms (59.325623ms including waiting)
Normal Created 22m kubelet Created container wp
Normal Started 22m kubelet Started container wp
[root@master pod]# #最后几行为错误输出
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
www-dp 0/1 Terminating 0 12s <none> workr232 <none> <none>
[root@master pod]# # 输出同上
[root@master pod]# kubectl describe pod www-dp
[root@master pod]# kubectl describe pod/www-dp
[root@master pod]# # 连接到指定的容器查看
[root@master231 pod]# kubectl exec -it www-db -- sh # 当一个Pod内只有一个容器时,无需使用-c选项。
[root@master231 pod]# kubectl exec -it www-db -c wp -- bash # 当Pod内有多个容器时,可以使用-c选项连接到指定的容器。若不指定,默认连接到第一个容器。