当前位置:   article > 正文

(K8S实践2)Pod常用操作_kubectl get pod -o wide

kubectl get pod -o wide

在这里插入图片描述

一、创建pod的两种方式

1.命令方式
①创建命令:
#kubectl run kubia --image=luksa/kubia --replicas=3
②查看资源:
#kubectl get pod -o wide
在这里插入图片描述
2.文件方式
#vim nginx-master.yaml

apiVersion: extensions/v1beta1  #描述文件遵循extensions/v1beta1版本的Kubernetes API
kind: Deployment                #创建资源类型为Deployment
metadata:                       #该资源元数据
  name: nginx-master            #Deployment名称
spec:                           #Deployment的规格说明
  replicas: 3                   #指定副本数为3
  template:                     #定义Pod的模板
    metadata:                   #定义Pod的元数据
      labels:                   #定义label(标签)
        app: nginx              #label的key和value分别为app和nginx
    spec:                       #Pod的规格说明
      containers:               
      - name: nginx             #容器的名称
        image: nginx:latest     #创建容器所使用的镜像
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

①执行创建命令
#kubectl create -f nginx-master.yaml
在这里插入图片描述
②查看创建的资源
#kubectl get deployments -o wide
在这里插入图片描述
#kubectl get pod
在这里插入图片描述

二、进入pod

进入pod kubia-66c8b6d4fc-qhsrd(master节点)
#kubectl exec -it kubia-66c8b6d4fc-qhsrd bash

在这里插入图片描述

三、标签

标签其实就是一对key/value,可以附加到资源的任意键值对,标签可以用来划分特定组的对象,用以选择具有改确切标签的资源。
1.pod使用标签
①pod指定标签
#kubectl run http-label --image=httpd --labels=“app=web,env=prod”
在这里插入图片描述
②查看pod的标签
#kubectl get pod -l app --show-labels
使用标签筛选pod,通过-l app参数可筛选所有标签为app的pod
在这里插入图片描述
③修改现有标签
#kubectl label pod http-label-7cf498876f-59mws env=debug --overwrite
在这里插入图片描述
#kubectl get pod --show-labels
在这里插入图片描述
④删除标签
#kubectl label pod http-label-7cf498876f-59mws env-
在这里插入图片描述
2.通过标签指定pod创建的节点
给node节点打标签
#kubectl label nodes master node=master
#kubectl label nodes node1 node=node1
#kubectl label nodes node2 node=node2
指定node创建pod
#vim httpd-node.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpd-node
spec:
  template:
    metadata:
      labels:
        env: prod
    spec:
      containers:
      - name: httpd-node
        image: httpd:latest
      nodeSelector:
        node: master
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

执行创建命令
#kubectl apply -f httpd-node.yaml
在这里插入图片描述

四、命名空间

Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default)
1.查看命名空间
#kubectl get ns
在这里插入图片描述
2.查看指定命名空间的pod
#kubectl get pod --namespace=default
#kubectl get pod -n kube-system
在这里插入图片描述
3.创建命名空间
文件方式创建test01-namespace.yaml
#vim /data/shell/test01-namespace.yaml

apiVersion: v1
kind: Namespace
metadata: 
  name: test01-namespace
  • 1
  • 2
  • 3
  • 4

执行创建命令
①#kubectl apply -f test01-namespace.yaml
在这里插入图片描述
命令方式:
②#kubectl create ns test02-namespace
在这里插入图片描述
4.pod指定命名空间
①指定创建pod的命名空间为test01-namespace
#kubectl run httpd --image=httpd -n test01-namespace
在这里插入图片描述
②查询pod
#kubectl get pods -n test01-namespace
在这里插入图片描述
③命名空间切换
#alias kcd=‘kubectl config set-context $(kubectl config current-context) --namespace’
#kcd test01-namespace
在这里插入图片描述

五、扩容/缩容

创建文件nginx-scale.yaml并新建资源

apiVersion: extensions/v1beta1  #描述文件遵循extensions/v1beta1版本的Kubernetes API
kind: Deployment                #创建资源类型为Deployment
metadata:                       #该资源元数据
  name: nginx-scale             #Deployment名称
spec:                           #Deployment的规格说明
  replicas: 3                   #指定副本数为3
  template:                     #定义Pod的模板
    metadata:                   #定义Pod的元数据
      labels:                   #定义label(标签)
        env: prod               #label的key和value分别为app和nginx
    spec:                       #Pod的规格说明
      containers:
      - name: nginx-scale       #容器的名称      
        image: nginx:latest     #创建容器所使用的镜像
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

①执行创建
#kubectl -apply -f nginx-scale.yaml
在这里插入图片描述
②查看资源
在这里插入图片描述
③文件方式扩容:通过修改文件中参数replicas的值并重新执行kubectl apply命令即可实现pod的扩缩容
在这里插入图片描述
④命令方式
#kubectl scale deployment nginx-scale --replicas=1
在这里插入图片描述

六、failover

1.pod节点分布查看
#kubectl get pod -o wide --all-namespaces
在这里插入图片描述
2.faillover测试
节点node2关机
在这里插入图片描述
查看node状态和pod分布
#kubectl get pod -o wide --all
在这里插入图片描述
node2状态为NotReady且之前在该节点的pod被迁移至master或者node1.当node2恢复后,运行在该节点的Pod会被删除,且迁移至master和node1的Pod不会重新调度回到node2。

七、升级及回滚

1.创建deployment
#vim nginx-roll.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-roll
  namespace: test02-namespace
spec:
  selector:
    matchLabels:
      env: prod
  replicas: 3
  template:
    metadata:
      labels:
        env: prod
    spec:
      containers:
      - name: nginx-roll
        image: nginx:1.16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

创建deployment nginx-roll,副本数为3,namespace为test02-namespace,nginx版本为1.16,–record参数会记录历史版本号。
#kubectl apply -f nginx-roll.yaml --record
查看部署资源pod
在这里插入图片描述
2.升级
升级的方式有多种,比如[kubectl edit deployments -n test02-namespace nginx-roll]方式,直接修改nginx-roll.yaml文件、kubectl set image方式等。
①修改文件方式
#sed -i ‘s/image: nginx:1.16/image: nginx:1.17/g’ nginx-roll.yaml
#kubectl apply -f nginx-roll.yaml --record
在这里插入图片描述
#kubectl rollout status deployment -n test02-namespace nginx-roll
在这里插入图片描述
②kubectl set image方式

#kubectl set image deployment -n test02-namespace nginx-roll nginx-roll=nginx:1.17.5

3.回滚
①查看deployments版本
#kubectl rollout history deployments -n test02-namespace nginx-roll
在这里插入图片描述
②查看deployment具体版本信息
#kubectl rollout history deployments -n test02-namespace nginx-roll --revision=1
在这里插入图片描述
③回滚至上一个版本
#kubectl rollout undo deployment -n test02-namespace nginx-roll
在这里插入图片描述
④查看
#kubectl rollout status deployment -n test02-namespace nginx-roll
在这里插入图片描述
⑤回滚至指定版本
#kubectl rollout undo deployment -n test02-namespace nginx-roll --to-revision=1
在这里插入图片描述
⑥查看
在这里插入图片描述
在这里插入图片描述

⑦查看Replicasets
#kubectl get replicasets -n test02-namespace -o wide
在这里插入图片描述
可以看到升级过程中replicaset保留了修改的历史版本信息。

八、内网访问

1.创建pod
#vim web-svc.yaml

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: web-svc
  namespace: test02-namespace
spec: 
  selector: 
    matchLabels: 
        app: web-svc
  replicas: 3
  template: 
    metadata: 
      labels: 
        app: web-svc
    spec: 
      containers: 
      - name: web-svc
        image: httpd:latest
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

#kubectl apply -f web-svc.yaml
在这里插入图片描述
2.内网访问
创建service

#vim web-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: web-svc
  namespace: test02-namespace
spec:
  selector:
    app: web-svc
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

①创建内网service
#kubectl apply -f web-svc.yaml
②查看创建的service
#kubectl get service -n test02-namespace
在这里插入图片描述
③修改index.html
在这里插入图片描述

master节点:echo '<html><body><h1>It works!web-svc-58956c55fc-z6msf</h1></body></html>'>index.html 
node1节点:echo '<html><body><h1>It works!web-svc-58956c55fc-dw5kk</h1></body></html>'>index.html
node2节点:echo '<html><body><h1>It works!web-svc-58956c55fc-bcpbx</h1></body></html>'>index.html
  • 1
  • 2
  • 3

④内网访问pod
#for i in {1…10};do sleep 1;curl 10.102.203.64:8080;done
在这里插入图片描述
3.外网访问
修改service
新增’type: NodePort’和’nodePort: 30002’,通过NodePort方式外网访问pod,映射端口为30002,重新kubectl apply。(参考内网访问)

apiVersion: v1
kind: Service
metadata:
  name: web-svc
  namespace: test02-namespace
spec:
  type: NodePort
  selector:
    app: web-svc
  ports:
  - protocol: TCP
    nodePort: 30002
    port: 8080
    targetPort: 80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

外网访问pod
#for i in {1…10};do sleep 1;curl 192.168.3.183:30002;done
在这里插入图片描述

九、日志查看

使用kubectl logs命令可获取pod日志
1.查看最近的日志
#kubectl logs web-svc-58956c55fc-bcpbx -n test02-namespace --tail=20
在这里插入图片描述
‘–tail=20’:查看命名空间test02-namespace下web-svc-58956c55fc-bcpbx最近20行的日志,
2.查看前一个容器的日志
#kubectl logs web-svc-58956c55fc-bcpbx -n test02-namespace --previous
3.通过标签查看日志
#kubectl logs -lapp=web
查看标签为‘app=web’的日志;’-lapp=web’该日志是标签为’app=web’的合集
在这里插入图片描述

十、删除pod

1.通过删除deployment删除pod
通过deployment创建pod可以直接删除deployment
#kubectl delete deployments kubia
在这里插入图片描述
2.通过删除namespace删除pod
①删除namespace中所有资源
#kubectl delete all --all -n test01-namespace
在这里插入图片描述
②直接删除namespace
#kubectl delete ns test01-namespace
在这里插入图片描述
总结:
直接删除pod会重建一个新的不同名的pod;
直接删除replicasets会重建同名replicasets,其下所有pod则会删除重建且名字不同;
直接删除deployments则其下的replicasets和pod将一起被删除;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/162424
推荐阅读
相关标签
  

闽ICP备14008679号