资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

如何理解K8S中kubectl

这期内容当中小编将会给大家带来有关如何理解K8S中kubectl,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

你所需要的网站建设服务,我们均能行业靠前的水平为你提供.标准是产品质量的保证,主要从事成都网站设计、做网站企业网站建设、成都手机网站制作、网页设计、品牌网站建设、网页制作、做网站、建网站。创新互联公司拥有实力坚强的技术研发团队及素养的视觉设计专才。

一、kubectl 陈述式管理方法

kubectl小洁:
kubectl是官方的CLI命令行工具,用于apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径。

1、查看当前集群所有命名空间
[root@test-nodes1 ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   42h
kube-node-lease   Active   42h
kube-public       Active   42h
kube-system       Active   42h
------------------------------------------------------------------------------------------
2、查看default命名空间下的所有资源
[root@test-nodes1 ~]# kubectl get all -n default
NAME                  READY   STATUS             RESTARTS   AGE
pod/nginx-ds-76fr8    0/1     ImagePullBackOff   0          39h
pod/nginx-ds-zz7jn    0/1     ErrImagePull       0          39h
pod/nginx-ds1-qg45q   1/1     Running            0          39h
pod/nginx-ds1-whnmv   1/1     Running            0          39h
#pod资源

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   192.168.0.1           443/TCP   42h
#service资源

NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/nginx-ds    2         2         0       2            0                     39h
daemonset.apps/nginx-ds1   2         2         2       2            2                     39h
#pod控制器
------------------------------------------------------------------------------------------

3、创建与删除命名空间
[root@test-nodes1 ~]# kubectl create namespace test
namespace/test created
[root@test-nodes1 ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   42h
kube-node-lease   Active   42h
kube-public       Active   42h
kube-system       Active   42h
test              Active   6s
[root@test-nodes1 ~]# kubectl delete namespace test
namespace "test" deleted
------------------------------------------------------------------------------------------

4、创建deployment(pods控制器)资源
[root@test-nodes1 ~]# kubectl create deployment nignx-dp --image=test-harbor.cedarhd.com/public/nginx:v1.7.9 -n kube-public
deployment.apps/nignx-dp created
------------------------------------------------------------------------------------------

5、查看kube-public命名空间下的deployment资源控制器
[root@test-nodes1 ~]# kubectl get deployment -n kube-public
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
nignx-test   0/1     1            0           70s
------------------------------------------------------------------------------------------

6、查看kube-public命名空间下pods的运行情况
[root@test-nodes1 ~]# kubectl get deployment -n kube-public
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
nignx-test   1/1     1            1           21s
------------------------------------------------------------------------------------------

7、查看kube-public空间下的pods资源
[root@test-nodes1 ~]# kubectl get pods -n kube-public -o wide
NAME                          READY   STATUS             RESTARTS   AGE    IP           NODE                      NOMINATED NODE   READINESS GATES
nignx-dp-7f6d4979bd-nnc57     0/1     ImagePullBackOff   0          13m    172.7.21.4   test-nodes1.cedarhd.com              
nignx-test-655d6fbcb5-r9t57   1/1     Running            0          4m1s   172.7.22.4   test-nodes2.cedarhd.com              
------------------------------------------------------------------------------------------

8、在test-nodes2.cedarhd.com节点上curl 172.7.22.4 nginx
[root@test-nodes2 ~]# curl 172.7.22.4



Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

------------------------------------------------------------------------------------------ 9、查看deployment下具体pods(nginx-test)详细信息 [root@test-nodes1 ~]# kubectl describe deployment nignx-test -n kube-public Name:                   nignx-test Namespace:              kube-public CreationTimestamp:      Mon, 03 Feb 2020 02:02:59 -0500 Labels:                 app=nignx-test Annotations:            deployment.kubernetes.io/revision: 1 Selector:               app=nignx-test Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable StrategyType:           RollingUpdate MinReadySeconds:        0 RollingUpdateStrategy:  25% max unavailable, 25% max surge Pod Template:   Labels:  app=nignx-test   Containers:    nginx:     Image:        test-harbor.cedarhd.com/public/nginx:v1.7.9     Port:              Host Port:         Environment:       Mounts:          Volumes:         Conditions:   Type           Status  Reason   ----           ------  ------   Available      True    MinimumReplicasAvailable   Progressing    True    NewReplicaSetAvailable OldReplicaSets:   NewReplicaSet:   nignx-test-655d6fbcb5 (1/1 replicas created) Events:   Type    Reason             Age   From                   Message   ----    ------             ----  ----                   -------   Normal  ScalingReplicaSet  22m   deployment-controller  Scaled up replica set nignx-test-655d6fbcb5 to 1     ------------------------------------------------------------------------------------------ 10、进入nginx-test pod资源 [root@test-nodes1 ~]# kubectl get pods -n kube-public NAME                          READY   STATUS             RESTARTS   AGE nignx-test-655d6fbcb5-r9t57   1/1     Running            0          24m [root@test-nodes1 ~]# kubectl exec -ti nignx-test-655d6fbcb5-r9t57 /bin/bash -n kube-public #与docker 操作方法一致 root@nignx-test-655d6fbcb5-r9t57:/# ip addr 1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo        valid_lft forever preferred_lft forever 12: eth0@if13:  mtu 1500 qdisc noqueue state UP      link/ether 02:42:ac:07:16:04 brd ff:ff:ff:ff:ff:ff     inet 172.7.22.4/24 brd 172.7.22.255 scope global eth0        valid_lft forever preferred_lft forever ------------------------------------------------------------------------------------------ 11、删除pod资源(即重启) [root@test-nodes1 ~]# kubectl delete pod nignx-test-655d6fbcb5-r9t57 -n kube-public pod "nignx-test-655d6fbcb5-r9t57" deleted [root@test-nodes1 ~]# kubectl get pods -n kube-public -o wide NAME                          READY   STATUS             RESTARTS   AGE   IP           NODE                      NOMINATED NODE   READINESS GATES nignx-dp-7f6d4979bd-nnc57     0/1     ImagePullBackOff   0          40m   172.7.21.4   test-nodes1.cedarhd.com               nignx-test-655d6fbcb5-c42z8   1/1     Running            0          18s   172.7.21.5   test-nodes1.cedarhd.com               ------------------------------------------------------------------------------------------ 12、删除deployment [root@test-nodes1 ~]# kubectl get deploy -n kube-public NAME         READY   UP-TO-DATE   AVAILABLE   AGE nignx-dp     0/1     1            0           53m nignx-test   1/1     1            1           36m [root@test-nodes1 ~]# kubectl delete deploy nignx-dp -n kube-public deployment.extensions "nignx-dp" deleted ------------------------------------------------------------------------------------------ 13、为nginx-dp pod资源创建service资源,保障pod的高可用,通过集群IP访问 [root@test-nodes1 ~]# kubectl get all -n kube-public NAME                            READY   STATUS    RESTARTS   AGE pod/nginx-dp-5b9b697bcc-jtrlp   1/1     Running   0          17s NAME                       READY   UP-TO-DATE   AVAILABLE   AGE deployment.apps/nginx-dp   1/1     1            1           17s NAME                                  DESIRED   CURRENT   READY   AGE replicaset.apps/nginx-dp-5b9b697bcc   1         1         1       17s [root@test-nodes1 ~]# kubectl get pods -n kube-public -o wide NAME                        READY   STATUS    RESTARTS   AGE     IP           NODE                      NOMINATED NODE   READINESS GATES nginx-dp-5b9b697bcc-jtrlp   1/1     Running   0          3m19s   172.7.21.4   test-nodes1.cedarhd.com               [root@test-nodes1 ~]# kubectl expose deployment nginx-dp --port=80 -n kube-public service/nginx-dp exposed [root@test-nodes1 ~]# kubectl get svc -n kube-public      #查看service资源 NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE nginx-dp   ClusterIP   192.168.224.56           80/TCP    12m [root@test-nodes1 ~]# kubectl get all -n kube-public NAME                            READY   STATUS    RESTARTS   AGE pod/nginx-dp-5b9b697bcc-jtrlp   1/1     Running   0          5m21s NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE service/nginx-dp   ClusterIP   192.168.224.56           80/TCP    79s NAME                       READY   UP-TO-DATE   AVAILABLE   AGE deployment.apps/nginx-dp   1/1     1            1           5m21s NAME                                  DESIRED   CURRENT   READY   AGE replicaset.apps/nginx-dp-5b9b697bcc   1         1         1       5m21s [root@test-nodes1 ~]# curl 192.168.224.56 Welcome to nginx!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

[root@test-nodes1 ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn TCP  192.168.0.1:443 nq   -> 10.3.153.221:6443            Masq    1      0          0            -> 10.3.153.222:6443            Masq    1      0          0          TCP  192.168.224.56:80 nq   -> 172.7.21.4:80                Masq    1      0          0

二、kubectl 声明式管理方法

小结:
声明式资源管理方法依赖于—资源配置清单(yaml\json),偏于修改POD配置。

如何理解K8S中kubectl

1、查看当前pod的资源配置清单
[root@test-nodes1 ~]# kubectl get pods -n kube-public
NAME                        READY   STATUS    RESTARTS   AGE
nginx-dp-5b9b697bcc-jtrlp   1/1     Running   0          5h31m
-nodes1.cedarhd.com              
[root@test-nodes1 ~]# kubectl get pods nginx-dp-5b9b697bcc-jtrlp -n kube-public -o yaml
apiVersion: v1
kind: Pod                #类型为pod
metadata:
  creationTimestamp: "2020-02-03T07:50:11Z"
  generateName: nginx-dp-5b9b697bcc-
  labels:
    app: nginx-dp
    pod-template-hash: 5b9b697bcc
  name: nginx-dp-5b9b697bcc-jtrlp
  namespace: kube-public
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet
    name: nginx-dp-5b9b697bcc
    uid: 30bbaf90-c97e-4167-9419-45a632e9b3ce
  resourceVersion: "222257"
  selfLink: /api/v1/namespaces/kube-public/pods/nginx-dp-5b9b697bcc-jtrlp
  uid: 59d63844-8ee7-4d7e-8536-d4e5de1ba903
spec:
  containers:
  - image: test-harbor.cedarhd.com/public/nginx:v1.7.9
    imagePullPolicy: IfNotPresent
    name: nginx
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: default-token-nt4w9
      readOnly: true
  DNSPolicy: ClusterFirst
  enableServiceLinks: true
  nodeName: test-nodes1.cedarhd.com
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: default-token-nt4w9
    secret:
      defaultMode: 420
      secretName: default-token-nt4w9
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2020-02-03T07:50:11Z"
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: "2020-02-03T07:50:14Z"
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: "2020-02-03T07:50:14Z"
    status: "True"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: "2020-02-03T07:50:11Z"
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: docker://745d5ad3412e5bccf2fb27dacce57e76987e8f6881cdb3aec79912888ba37ad6
    image: test-harbor.cedarhd.com/public/nginx:v1.7.9
    imageID: docker-pullable://test-harbor.cedarhd.com/public/nginx@sha256:b1f5935eb2e9e2ae89c0b3e2e148c19068d91ca502e857052f14db230443e4c2
    lastState: {}
    name: nginx
    ready: true
    restartCount: 0
    state:
      running:
        startedAt: "2020-02-03T07:50:13Z"
  hostIP: 10.3.153.221
  phase: Running
  podIP: 172.7.21.4
  qosClass: BestEffort
  startTime: "2020-02-03T07:50:11Z"
------------------------------------------------------------------------------------------

2、获取service资源的配置清单
[root@test-nodes1 ~]# kubectl get service -n kube-public
NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
nginx-dp   ClusterIP   192.168.224.56           80/TCP    5h31m
[root@test-nodes1 ~]# kubectl get service nginx-dp -o yaml -n kube-public
apiVersion: v1
kind: Service        #类型为service
metadata:
  creationTimestamp: "2020-02-03T07:54:13Z"
  labels:
    app: nginx-dp
  name: nginx-dp
  namespace: kube-public
  resourceVersion: "222606"
  selfLink: /api/v1/namespaces/kube-public/services/nginx-dp
  uid: 1b2310b5-6016-4692-b632-5c43d6dc4de5
spec:
  clusterIP: 192.168.224.56
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx-dp
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}
    ------------------------------------------------------------------------------------------

3、explain查看字段帮助说明
kubectl explain service.metadata
 ------------------------------------------------------------------------------------------

4、新建一个service的资源配置清单
[root@test-nodes1 ~]# vi nginx-ds-svc.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-ds
  name: nginx-ds
  namespace: kube-public
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx-ds
  sessionAffinity: None
  type: ClusterIP
------------------------------------------------------------------------------------------

5、通过声明式资源配置清单创建一个service资源
[root@test-nodes1 ~]# kubectl create -f nginx-ds-svc.yaml 
service/nginx-ds created
[root@test-nodes1 ~]# kubectl get service -n kube-public
NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
nginx-dp   ClusterIP   192.168.224.56           80/TCP    5h39m
nginx-ds   ClusterIP   192.168.66.3             80/TCP    16s
------------------------------------------------------------------------------------------

6、在线修改nginx-ds的 service 资源端口为81
[root@test-nodes1 ~]# kubectl get svc -n kube-public
NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
nginx-dp   ClusterIP   192.168.224.56           80/TCP    5h49m
nginx-ds   ClusterIP   192.168.66.3             80/TCP    10m

[root@test-nodes1 ~]# kubectl edit svc nginx-ds -n kube-public
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2020-02-03T13:23:41Z"
  labels:
    app: nginx-ds
  name: nginx-ds
  namespace: kube-public
  resourceVersion: "250724"
  selfLink: /api/v1/namespaces/kube-public/services/nginx-ds
  uid: 5840630d-e00d-4e98-91a1-2b65a1eb22f4
spec:
  clusterIP: 192.168.66.3
  ports:
  - port: 81      #修改对外端口81
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx-ds
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}
"/tmp/kubectl-edit-wp634.yaml" 27L, 684C written
service/nginx-ds edited
[root@test-nodes1 ~]# kubectl get svc -n kube-public
NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
nginx-dp   ClusterIP   192.168.224.56           80/TCP    5h50m
nginx-ds   ClusterIP   192.168.66.3             81/TCP    10m
------------------------------------------------------------------------------------------

7、删除一个service资源
[root@test-nodes1 ~]# kubectl delete svc nginx-ds -n kube-public
service "nginx-ds" deleted

三、关于kubectl的核心资源理解

[root@test-nodes1 ~]# kubectl get all -n kube-public
NAME                            READY   STATUS    RESTARTS   AGE
pod/nginx-dp-5b9b697bcc-jtrlp   1/1     Running   0          6h2m
#pod资源,承载容器应用所在

NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service/nginx-dp   ClusterIP   192.168.224.56           80/TCP    5h67m
#service资源,Service是Kubernetes里最核心的资源对象之一,Service定义了一个服务的访问入口地址,前端的应用(Pod)通过这个入口地址访问其背后的一组由Pod副本组成的集群实力

NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-dp   1/1     1            1           6h2m
#deployment资源,Deployment同样也是Kubernetes系统的一个核心概念,
主要职责和RC一样的都是保证Pod的数量和健康,可理解为pod控制器,
当我们删除pod时,会再启动,不是真正删除,如需删除该pod,必须删除
该控制器

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-dp-5b9b697bcc   1         1         1       6h2m

四、通过kubectl单独创建一个pod\deployment\service

1、创建一个nginx pod
[root@test-nodes1 ~]# vi nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: web
spec:
  containers:
    - name: nginx
      image: test-harbor.cedarhd.com/public/nginx:v1.7.9
      ports:
        - containerPort: 80

[root@test-nodes1 ~]# kubectl create -f nginx-pod.yaml       #创建一个POD
pod/nginx created
[root@test-nodes1 ~]# kubectl get all
NAME                  READY   STATUS    RESTARTS   AGE
pod/nginx             1/1     Running   0          10m       #刚刚创建的POD
pod/nginx-ds1-qg45q   1/1     Running   0          47h
pod/nginx-ds1-whnmv   1/1     Running   0          47h
NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   192.168.0.1           443/TCP   2d2h
NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/nginx-ds1   2         2         2       2            2                     47h
------------------------------------------------------------------------------------------

2、为该pod创建一个service
[root@test-nodes1 ~]# kubectl expose pod nginx --port=80 -n default
service/nginx exposed
[root@test-nodes2 ~]# kubectl get all 
NAME                  READY   STATUS    RESTARTS   AGE
pod/nginx             1/1     Running   0          14m
pod/nginx-ds1-qg45q   1/1     Running   0          47h
pod/nginx-ds1-whnmv   1/1     Running   0          47h

NAME                 TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   192.168.0.1               443/TCP   2d2h
service/nginx        ClusterIP   192.168.123.163           80/TCP    107s

NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/nginx-ds1   2         2         2       2            2                     47h
[root@test-nodes2 ~]# curl 192.168.123.163    获取nginx页面
------------------------------------------------------------------------------------------

3、创建一个deployment
[root@test-nodes2 ~]# kubectl create deployment nginx-test --image=test-harbor.cedarhd.com/public/nginx:v1.7.9
deployment.apps/nginx-test created
[root@test-nodes2 ~]# kubectl get all
NAME                              READY   STATUS    RESTARTS   AGE
pod/nginx                         1/1     Running   0          27m
pod/nginx-ds1-qg45q               1/1     Running   0          47h
pod/nginx-ds1-whnmv               1/1     Running   0          47h
pod/nginx-test-5674474869-5nr7j   1/1     Running   0          4s

NAME                 TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   192.168.0.1               443/TCP   2d2h
service/nginx        ClusterIP   192.168.123.163           80/TCP    15m

NAME                       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/nginx-ds1   2         2         2       2            2                     47h

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-test   1/1     1            1           4s

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-test-5674474869   1         1         1       4s

上述就是小编为大家分享的如何理解K8S中kubectl了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


文章标题:如何理解K8S中kubectl
当前链接:http://cdkjz.cn/article/giohhi.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220