k8s day01-Pod的基础管理,常用故障排查命令,标签管理实战案例

一个Pod运行单个容器案例:
    (1)编写资源清单
mkdir -pv /oldboyedu/manifests/pod && cd /oldboyedu/manifests/pod
cat > 01-pod-nginx.yaml <<'EOF'
# 部署的资源类型
kind: Pod
# API的版本号
apiVersion: v1
# 元数据信息
metadata:
  # 资源的名称
  name: oldboyedu-linux82-web
# 自定义Pod资源的配置
spec:
  # 定义容器相关信息
  containers:
    # 定义容器的名称
  - name: linux82-web
    # 定义容器基于哪个镜像启动
    image: k8s151.oldboyedu.com:5000/oldboyedu-web/nginx:1.20.1
EOF

    (2)创建资源
kubectl create -f 01-pod-nginx.yaml   

    (3)查看Pod资源
kubectl get pods
kubectl get pods -o wide  # 主要查看IP地址

相关字段说明:
    NAME
        代表的是资源的名称。
    READY   
        代表资源是否就绪。比如 0/1 ,表示一个Pod内有一个容器,而且这个容器还未运行成功。
    STATUS    
        代表容器的运行状态。
    RESTARTS   
        代表Pod重启次数,即容器被创建的次数。
    AGE     
        代表Pod资源运行的时间。
    IP            
        代表Pod的IP地址。
    NODE
        代表Pod被调度到哪个节点。
    其他:    
        "NOMINATED NODE和"READINESS GATES"暂时先忽略哈。
        
        
 
Pod资源的增删查:
    1)创建资源
kubectl create -f 01-pod-nginx.yaml
    若资源不存在则创建,若资源已存在则创建失败,报错。
    
kubectl apply -f 01-pod-nginx.yaml 
    若资源不存在则创建,若资源已存在则不做任何处理。【推荐使用】

kubectl apply -f .
    创建当前目录下的所有yaml资源清单。
    

    2)删除资源
kubectl delete -f 01-pod-nginx.yaml 
    基于文件的方式删除资源。
    
kubectl delete po oldboyedu-linux82-web 
    将名为“oldboyedu-linux82-web”的Pod资源删除。

kubectl delete all --all
    删除default名称空间下的所有资源。

kubectl delete -f .
    删除当前目录下的所有yaml资源清单。
    

    3)查看Pod资源
kubectl get pods
    查看所有pods的基础信息。
    
kubectl get po -o wide
    查看所有Pod的IP地址和NODE节点。
    
kubectl get po oldboyedu-linux82-web 
    查看名为“oldboyedu-linux82-web”的Pod资源。

kubectl get po oldboyedu-linux82-web -o wide
    查看名为“oldboyedu-linux82-web”的IP地址细腻。
    
kubectl get po oldboyedu-linux82-web -o yaml
    查看名为“oldboyedu-linux82-web”的Pod配置文件。
    

查看K8S集群支持的资源:
    kubectl api-resources

    各字段说明:
        NAME
            资源的名称。
        SHORTNAMES
            资源的简称,短名称。
        APIGROUP
            该资源属于哪个API组。
        NAMESPACED
            该资源属于哪个名称空间。
        KIND
            资源的类型。


查看K8S各个字段的作用:
    kubectl explain pods.spec.containers.image
    kubectl explain po.spec.containers.image
    kubectl explain po.spec.containers.ports.hostIP


    字符串。直接写字符串。

    整数。直接写数字。

    对象类型,不能直接写东西,而是在下级字段写"KEY: VALUE"。
    值得注意的是,下级字段的KEY是固定的,换句话说,就是官方帮你定义好了,你直接用即可。否则会报错“unknown field ...”
<[]Object>
    数组对象类型,不能直接写东西,而是在下级字段写"KEY: VALUE",多个对象必须使用"-"来区分。
    同理,下级字段的KEY是固定的,换句话说,就是官方帮你定义好了,你直接用即可。否则会报错“unknown field ...”

    布尔类型,只有true或者false两个值。

    对应Golang语言的MAP数据类型,其中KEY是字符串,值也是字符串。我们可以自定义KEY和VALUE即可。
    从写法上来看和""类似,但是""类型下级字段是固定的,而""是自定义。

Pod资源标签配置:
[[email protected] po]# cat 04-pods-labels.yaml 
kind: Pod
apiVersion: v1
metadata:
  name: oldboyedu-linux82-labels
  labels:
     school: oldboyedu
     class: linux82
     address: www.oldboyedu.com
spec:
  nodeName: k8s152.oldboyedu.com
  hostNetwork: true
  containers:
  - name: xiaobawang
    image: k8s151.oldboyedu.com:5000/oldboyedu-games/xiaobawang:v0.1
[[email protected] po]# 


声明式API:
    基于配置文件管理资源。

响应式API:
    基于命令行的方式管理资源。
    
标签管理:
    1.查看Pods标签
kubectl get po --show-labels


    2.修改Pod标签
        2.1 基于声明式方式修改【修改配置文件后需要应用后才能生效。推荐使用,方便迁移。】
kubectl apply -f 04-pods-labels.yaml 


        2.2 基于响应式方式修改【立刻生效,测试时使用】
kubectl label po oldboyedu-linux82-labels hobby-
    删除一个名为hobby的标签。
kubectl label po oldboyedu-linux82-labels class- address-
    删除class和address对应的标签。
kubectl label po oldboyedu-linux82-labels class=linux82 address=ShaHe
    创建多个标签。
kubectl label po oldboyedu-linux82-labels --overwrite school=oldboyedu-2022
    修改已存在的标签。


扩展:
 kubectl get no --show-labels
    查看nodes节点的标签信息。
    
 kubectl label nodes --all school=oldboyedu
    给所有的nodes节点打标签。
    
 kubectl label nodes k8s151.oldboyedu.com school-
    将"k8s151.oldboyedu.com"节点的school的KEY进行删除。


故障排查相关命令: - describe
    kubectl describe -f 04-pods-labels.yaml 
        查看某个资源清单文件创建资源的的详细信息。
        
    kubectl describe pods oldboyedu-linux82-games 
        查看名称为"oldboyedu-linux82-games"的Pod信息。
        
    kubectl describe pod/oldboyedu-linux82-nginx-alpine 
        查看名称为"oldboyedu-linux82-nginx-alpine "的Pod信息。

故障排查相关命令: - exec
    kubectl exec oldboyedu-linux82-labels  -- ls -l
        查看容器的根路径文件。

    kubectl exec oldboyedu-linux82-labels -it -- sh
        连接到容器进行操作,和docker优点类似。

    kubectl exec oldboyedu-linux82-nginx-alpine -itc linux82-alpine   -- sh
        指定连接到"oldboyedu-linux82-nginx-alpine"Pod的"linux82-alpine"容器内。
        当一个Pod有多个容器时,我们可以指定链接到哪个容器,通过"-c"选项。


故障排查相关命令: - cp
    kubectl cp kube-flannel.yml -c linux82-web oldboyedu-linux82-nginx-alpine:/usr/share/nginx/html/
        将本地文件拷贝到"oldboyedu-linux82-nginx-alpine"的Pod内"linux82-web"容器的"/usr/share/nginx/html/"路径。
        
    kubectl cp kube-flannel.yml oldboyedu-linux82-nginx-alpine:/usr/share/nginx/html/oldboyedu.html
        将本地文件拷贝到"oldboyedu-linux82-nginx-alpine"的Pod的"/usr/share/nginx/html/oldboyedu.html"路径(若是文件则会进行重命名)。

    kubectl cp oldboyedu-linux82-nginx-alpine:/usr/share/nginx/html/50x.html -c linux82-web ./test/2222
        将容器的文件拷贝到宿主机。
        
    kubectl cp oldboyedu-linux82-nginx-alpine:/usr/share/nginx/html/ -c linux82-web ./test/
        将容器的目录拷贝到宿主机
        
        
故障排查相关命令: - logs
    kubectl logs -f  --timestamps oldboyedu-linux82-nginx-alpine -c linux82-web --since=30m
        查看最近30分钟之内产生的日志信息。
        
    kubectl logs -f  --timestamps oldboyedu-linux82-nginx-alpine -c linux82-web --since-time=2022-09-06T09:16:15.150295607Z
        查看指定的某个时间点到当前时间的所有日志。
        
    常见选项说明:
        -f:
            实时查看日志内容。
            
        --timestamps:
            查看时间戳信息。
            
        -c:
            指定容器。
            
        --since:
            指定查看某个时间范围内的日志。比如说最近20分钟的日志。
        
        --since-time:
            指定某个时间点到当前时间所有的日志。
            


启动容器的指令command和args:
[[email protected] po]# cat 05-pods-command-args.yaml 
kind: Pod
apiVersion: v1
metadata:
  name: oldboyedu-linux82-args-command-005
spec:
  nodeName: k8s152.oldboyedu.com
  containers:
  - image: k8s151.oldboyedu.com:5000/oldboyedu-games/huangjinkuanggong:v0.1
    name: huangjinkuangong
  - name: xiaobawang
    image: k8s151.oldboyedu.com:5000/oldboyedu-games/xiaobawang:v0.1
    # 相当于Dockerfile的ENTRYPOINT指令
    # command:
    # - tail 
    # - -f
    # - /etc/hosts
    # 相当于Dockerfile的CMD指令
    # args:
    # - sleep
    # - "3600"
    # 当command和args联合使用时,args将作为参数传递给command
    # command:
    # - tail
    # - -f
    # args:
    # - /etc/hosts
    # 对于字符串数组也支持下面的写法
    command: ["tail"]
    args: ["-f","/etc/hosts"]
[[email protected] po]# 


      

常见的报错:
    ErrImagePull:
        报错原因:
            通常情况下是由于没有去往目标镜像对应主机的路由。
        解决方案:
            检查镜像名称是否指定正确。
            
    ImagePullBackOff:
        报错原因:
            镜像拉取失败。
        解决方案:
            上传镜像。
            
    CrashLoopBackOff:
        报错原因:
            Pod内有容器未正常启动。
        解决方案:
            基本上都是镜像的问题,比如说无法阻塞等情况,请检查镜像。


今日内容回顾:
    - Pod:
        是K8S集群部署的最小单元。
        一个Pod内可以有多个容器,Pod的网络基础镜像是:"registry.aliyuncs.com/google_containers/pause:3.1"
    - 常用的命令
        - kubectl create
        - kubectl apply 
        - kubectl delete
        - kubectl get 
        - kubectl describe
        - kubectl logs 
        - kubectl cp
        - kubectl exec 
        - kubectl explain
        
    - 资源清单文件的编写:
apiVersion:
kind:
metadata:
    name:
    labels:
spec:
    nodeName:
    hostNetwork:
    containers:
    - name:
      image:
      stdin:
      args:
      command:


 

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