zoukankan      html  css  js  c++  java
  • Kubectl管理工具

    1、常用指令如下

    运行应用程序

    [root@manager ~]# kubectl run hello-world --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80

    [root@manager ~]# kubectl get pods --selector="app=example"
    NAME                          READY     STATUS              RESTARTS   AGE
    hello-world-cc85d4fb6-btsvz   0/1       ContainerCreating   0          33s
    hello-world-cc85d4fb6-mtg75   0/1       ContainerCreating   0          33s
    hello-world-cc85d4fb6-r57vx   0/1       ContainerCreating   0          33s
    [root@manager ~]# 
    
    [root@manager ~]# kubectl describe pod hello-world-cc85d4fb6-btsvz
    Name:           hello-world-cc85d4fb6-btsvz
    Namespace:      default
    Node:           192.168.10.221/192.168.10.221
    Start Time:     Fri, 02 Feb 2018 10:13:01 +0800
    Labels:         app=example
                    pod-template-hash=774180962
    Annotations:    kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"hello-world-cc85d4fb6","uid":"98254448-07be-11e8-af8c-5254002bf2...
    Status:         Pending
    IP:             
    Created By:     ReplicaSet/hello-world-cc85d4fb6
    Controlled By:  ReplicaSet/hello-world-cc85d4fb6
    Containers:
      hello-world:
        Container ID:   
        Image:          nginx:1.10
        Image ID:       
        Port:           80/TCP
        State:          Waiting
          Reason:       ContainerCreating
        Ready:          False
        Restart Count:  0
        Environment:    <none>
        Mounts:         <none>
    Conditions:
      Type           Status
      Initialized    True 
      Ready          False 
      PodScheduled   True 
    Volumes:         <none>
    QoS Class:       BestEffort
    Node-Selectors:  <none>
    Tolerations:     <none>
    Events:
      Type    Reason     Age   From                     Message
      ----    ------     ----  ----                     -------
      Normal  Scheduled  1m    default-scheduler        Successfully assigned hello-world-cc85d4fb6-btsvz to 192.168.10.221
      Normal  Pulling    1m    kubelet, 192.168.10.221  pulling image "nginx:1.10"
      Normal  Pulled     6s    kubelet, 192.168.10.221  Successfully pulled image "nginx:1.10"
    查看pod所属标签
    [root@manager ~]# kubectl get pods --show-labels
    NAME                          READY     STATUS    RESTARTS   AGE       LABELS
    busybox                       1/1       Running   47         1d        <none>
    busybox2                      1/1       Running   5          1d        <none>
    hello-world-cc85d4fb6-btsvz   1/1       Running   0          2m        app=example,pod-template-hash=774180962
    hello-world-cc85d4fb6-mtg75   1/1       Running   0          2m        app=example,pod-template-hash=774180962
    hello-world-cc85d4fb6-r57vx   1/1       Running   0          2m        app=example,pod-template-hash=774180962

    根据标签查看pod

    [root@manager ~]# kubectl get pods -l app=example -o wide
    NAME READY STATUS RESTARTS AGE IP NODE
    hello-world-cc85d4fb6-btsvz 1/1 Running 0 3m 10.0.91.5 192.168.10.221
    hello-world-cc85d4fb6-mtg75 1/1 Running 0 3m 10.0.71.8 192.168.10.222
    hello-world-cc85d4fb6-r57vx 1/1 Running 0 3m 10.0.91.6 192.168.10.221

    显示有关deployment信息

    [root@manager ~]# kubectl get deployments hello-world
    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
    hello-world 3 3 3 3 3m
    [root@manager ~]#
    [root@manager ~]# kubectl describe deployments hello-world
    Name: hello-world
    Namespace: default
    CreationTimestamp: Fri, 02 Feb 2018 10:13:01 +0800
    Labels: app=example
    Annotations: deployment.kubernetes.io/revision=1
    Selector: app=example
    Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
    StrategyType: RollingUpdate
    MinReadySeconds: 0
    RollingUpdateStrategy: 1 max unavailable, 1 max surge
    Pod Template:
    Labels: app=example
    Containers:
    hello-world:
    Image: nginx:1.10
    Port: 80/TCP
    Environment: <none>
    Mounts: <none>
    Volumes: <none>
    Conditions:
    Type Status Reason
    ---- ------ ------
    Available True MinimumReplicasAvailable
    OldReplicaSets: <none>
    NewReplicaSet: hello-world-cc85d4fb6 (3/3 replicas created)
    Events:
    Type Reason Age From Message
    ---- ------ ---- ---- -------
    Normal ScalingReplicaSet 4m deployment-controller Scaled up replica set hello-world-cc85d4fb6 to 3

    显示有关rs信息

    [root@manager ~]# kubectl get replicasets
    NAME DESIRED CURRENT READY AGE
    hello-world-cc85d4fb6 3 3 3 4m
    [root@manager ~]#
    [root@manager ~]# kubectl describe replicasets
    Name: hello-world-cc85d4fb6
    Namespace: default
    Selector: app=example,pod-template-hash=774180962
    Labels: app=example
    pod-template-hash=774180962
    Annotations: deployment.kubernetes.io/desired-replicas=3
    deployment.kubernetes.io/max-replicas=4
    deployment.kubernetes.io/revision=1
    Controlled By: Deployment/hello-world
    Replicas: 3 current / 3 desired
    Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
    Pod Template:
    Labels: app=example
    pod-template-hash=774180962
    Containers:
    hello-world:
    Image: nginx:1.10
    Port: 80/TCP
    Environment: <none>
    Mounts: <none>
    Volumes: <none>
    Events:
    Type Reason Age From Message
    ---- ------ ---- ---- -------
    Normal SuccessfulCreate 4m replicaset-controller Created pod: hello-world-cc85d4fb6-btsvz
    Normal SuccessfulCreate 4m replicaset-controller Created pod: hello-world-cc85d4fb6-mtg75
    Normal SuccessfulCreate 4m replicaset-controller Created pod: hello-world-cc85d4fb6-r57vx

    扩容pod数量

    [root@manager ~]# kubectl scale deployment --replicas=5 hello-world
    deployment "hello-world" scaled

    [root@manager ~]#
    [root@manager ~]# kubectl get pods --selector="app=example" -o wide
    NAME READY STATUS RESTARTS AGE IP NODE
    hello-world-cc85d4fb6-btsvz 1/1 Running 0 5m 10.0.91.5 192.168.10.221
    hello-world-cc85d4fb6-mppx2 1/1 Running 0 17s 10.0.71.9 192.168.10.222
    hello-world-cc85d4fb6-mtg75 1/1 Running 0 5m 10.0.71.8 192.168.10.222
    hello-world-cc85d4fb6-r57vx 1/1 Running 0 5m 10.0.91.6 192.168.10.221
    hello-world-cc85d4fb6-xgv4z 1/1 Running 0 17s 10.0.91.7 192.168.10.221

    创建一个Service对象暴露Deployment(在88端口负载TCP流量)
    [root@manager ~]# kubectl expose deployment hello-world --port=88 --type=NodePort --target-port=80 --name=example-service
    service "example-service" exposed
    [root@manager ~]# 
    [root@manager ~]# kubectl describe services example-service
    Name:                     example-service
    Namespace:                default
    Labels:                   app=example
    Annotations:              <none>
    Selector:                 app=example
    Type:                     NodePort
    IP:                       10.10.10.11
    Port:                     <unset>  88/TCP
    TargetPort:               80/TCP
    NodePort:                 <unset>  31916/TCP
    Endpoints:                10.0.71.8:80,10.0.71.9:80,10.0.91.5:80 + 2 more...
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:                   <none>
    
    使用节点IP和节点端口访问应用程序
    [root@node1 ~]# curl 10.10.10.11:88
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
             35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>

    清理应用

    kubectl delete services example-service

    kubectl delete deployment hello-world

    [root@manager ~]# kubectl get all
    NAME          READY     STATUS    RESTARTS   AGE
    po/busybox    1/1       Running   47         1d
    po/busybox2   1/1       Running   5          1d
    
    NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    svc/kubernetes   ClusterIP   10.10.10.1   <none>        443/TCP   2d

    yaml配置文件管理资源

    配置文件说明:
    定义配置时,指定最新稳定版API(当前为v1);
    配置文件应该存储在集群之外的版本控制仓库中。如果需要,可以快速回滚配置、重新创建和恢复;
    应该使用YAML格式编写配置文件,而不是JSON。尽管这些格式都可以使用,但YAML对用户更加友好;
    可以将相关对象组合成单个文件,通常会更容易管理;
    不要没必要的指定默认值,简单和最小配置减少错误;
    在注释中说明一个对象描述更好维护。

    [root@manager ~]# 
    [root@manager ~]# cat nginx-deployment.yaml 
    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.10
            ports:
            - containerPort: 80
    
    
    [root@manager ~]# kubectl create -f nginx-deployment.yaml 
    deployment "nginx-deployment" created

    [root@manager ~]# cat nginx-service.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: nginx-service
    labels:
    app: nginx
    spec:
    ports:
    - port: 88
    targetPort: 80
    selector:
    app: nginx




    [root@manager ~]#
    [root@manager ~]# kubectl create -f nginx-service.yaml
    service "nginx-service" created
    [root@manager ~]#
    [root@manager ~]#
    [root@manager ~]# kubectl get svc
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    kubernetes ClusterIP 10.10.10.1 <none> 443/TCP 2d
    nginx-service ClusterIP 10.10.10.243 <none> 88/TCP 9s

    [root@manager ~]# kubectl describe services nginx-service
    Name: nginx-service
    Namespace: default
    Labels: app=nginx
    Annotations: <none>
    Selector: app=nginx
    Type: ClusterIP
    IP: 10.10.10.243
    Port: <unset> 88/TCP
    TargetPort: 80/TCP
    Endpoints: 10.0.71.8:80,10.0.71.9:80,10.0.91.5:80
    Session Affinity: None
    Events: <none>

  • 相关阅读:
    Android开发总结
    LeakCanary原理分析
    机器学习
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作
    远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm)
  • 原文地址:https://www.cnblogs.com/hellojackyleon/p/8403923.html
Copyright © 2011-2022 走看看