k8s基础知识:镜像下载策略、容器重启策略、资源限制、端口映射

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:              
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           workr232               
[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选项连接到指定的容器。若不指定,默认连接到第一个容器。

你可能感兴趣的:(kubernetes,linux,docker,运维,容器)