zoukankan      html  css  js  c++  java
  • k8s常用指令

    常用指令

    案例演示1: 通过对web应用的部署,暴露,升级,回滚,扩容来演示kubectl指令的使用
    
    1 部署一个web应用
    [root@master kubectl-cmd]# kubectl create deployment java-demo --image=tomcat 
    deployment.apps/java-demo created
    [root@master kubectl-cmd]# 
    [root@master kubectl-cmd]# kubectl get pods
    NAME                                      READY   STATUS    RESTARTS   AGE
    java-demo-6bdbd5ffbf-fr8wc                1/1     Running   0          102s
    [root@master kubectl-cmd]# 
    
    2 把这个应用暴露出去
    [root@master kubectl-cmd]# kubectl expose deployment java-demo  --port=80  --target-port=8080 --name=java-demo --type=NodePort
    service/java-demo exposed
    [root@master kubectl-cmd]#
    [root@master kubectl-cmd]# kubectl  get svc
    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    java-demo    NodePort    10.98.211.51   <none>        80:32166/TCP   11s
    [root@master kubectl-cmd]# 
    命令格式:
     kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name][--name=name][--external-ip=external-ip-of-service] [--type=type] [options] 
    命令解析:
          暴露的资源类型是deployment
            deployment的名字是depname-java
            --port=80                 对外暴露集群内容的端口是80
          --target-port=8080 镜像中应用程序提供的端口是8080
        --name=java-demo 暴露的这个service的名字是java-demo
          --type=NodePort   暴露出去的端口类型是NodePort
    
    
       3  对这个应用进行升级
    通过替换容器的方式,把名称为java-demo的deployment中containers中镜像的名字由tomcat替换成nginx
    [root@master kubectl-cmd]# kubectl set image deployment java-demo tomcat=nginx
    deployment.apps/java-demo image updated
    [root@master kubectl-cmd]# 
    查看containters中容器名称的方法:
    [root@master kubectl-cmd]# kubectl get deployment java-demo -o yaml
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: java-demo
        spec:
          containers:
          - image: tomcat
            imagePullPolicy: Always
            name: tomcat
    注意:
    升级之前web是tomcat,默认端口是8080,升级之后web是nginx 默认端口是80,所以需要手动修改这个要修改service.的targetPort,把它修改为80
    [root@master kubectl-cmd]# kubectl edit svc java-demo
    spec:
      clusterIP: 10.98.211.51
      externalTrafficPolicy: Cluster
      ports:
      - nodePort: 32166
        port: 80
        protocol: TCP
        targetPort: 80
    
    4  应用回滚
    [root@master kubectl-cmd]# kubectl rollout undo deployment java-demo   #回滚到上一个版本
    deployment.apps/java-demo rolled back
    [root@master kubectl-cmd]#
    [root@master kubectl-cmd]# kubectl get pods
    NAME                                      READY   STATUS        RESTARTS   AGE
    java-demo-6bdbd5ffbf-75l8f                1/1     Running       0          19s
    java-demo-759fc8c66c-qqwxz                1/1     Terminating   0          28m
    [root@master kubectl-cmd]# 
    [root@master kubectl-cmd]# kubectl get pods
    NAME                                      READY   STATUS    RESTARTS   AGE
    java-demo-6bdbd5ffbf-75l8f                1/1     Running   0          86s
    [root@master kubectl-cmd]# 
    注意:
    要把service中端口修改为8080
    
    5  扩容/缩容
    [root@master kubectl-cmd]# kubectl scale deployment java-demo --replicas=3
    deployment.apps/java-demo scaled
    [root@master kubectl-cmd]# kubectl get pods
    NAME                                      READY   STATUS    RESTARTS   AGE
    java-demo-6bdbd5ffbf-75l8f                1/1     Running   0          5m40s
    java-demo-6bdbd5ffbf-bjzjd                1/1     Running   0          45s
    java-demo-6bdbd5ffbf-xdhgp                1/1     Running   0          45s
    [root@master kubectl-cmd]# 
    
    案例演示2:通过对yaml文件的介绍来演示kubectl指令的使用
    YAML的介绍
            它是一种简介的非标记语言
              YAML文件格式	
    		    缩进表示层级关系
    		    不支持制表符“tab”缩进,使用空格缩进
    		    通常开头缩进 2 个空格
    		    字符后缩进 1 个空格,如冒号、逗号等
    		    “---” 表示YAML格式,一个文件的开始
    		    “#”注释
    		
     1   从官网拷贝ymal案例
     https://kubernetes.io/docs/tutorials/kubernetes-basics/官网搜索deployment,找到一个案例,用vim编辑器进行部分修改
    apiVersion:
    查看k8s所支持的aipVersion
    [root@master ~]# kubectl api-versions
    admissionregistration.k8s.io/v1
    admissionregistration.k8s.io/v1beta1
    apiextensions.k8s.io/v1
    apiextensions.k8s.io/v1beta1
    apiregistration.k8s.io/v1
    apiregistration.k8s.io/v1beta1
    apps/v1
    authentication.k8s.io/v1
    authentication.k8s.io/v1beta1
    authorization.k8s.io/v1
    authorization.k8s.io/v1beta1
    autoscaling/v1
    autoscaling/v2beta1
    autoscaling/v2beta2
    batch/v1
    batch/v1beta1
    certificates.k8s.io/v1beta1
    coordination.k8s.io/v1
    coordination.k8s.io/v1beta1
    discovery.k8s.io/v1beta1
    events.k8s.io/v1beta1
    extensions/v1beta1
    networking.k8s.io/v1
    networking.k8s.io/v1beta1
    node.k8s.io/v1beta1
    policy/v1beta1
    rbac.authorization.k8s.io/v1
    rbac.authorization.k8s.io/v1beta1
    scheduling.k8s.io/v1
    scheduling.k8s.io/v1beta1
    storage.k8s.io/v1
    storage.k8s.io/v1beta1
    v1
    [root@master ~]# 
    
    原数据metadata:
    通常包括:资源的名称和命名空间
    [root@master ~]# kubectl get ns
    NAME                   STATUS   AGE
    default                Active   293d
    ingress-nginx          Active   40d
    kube-node-lease        Active   293d
    kube-public            Active   293d
    kube-system            Active   293d
    kubernetes-dashboard   Active   293d
    ops                    Active   7d19h
    test                   Active   3d11h
    [root@master ~]#
    
    2  用指令生成yaml文件
            生成一个deployment文件
    [root@master kubectl-cmd]# kubectl create deployment web --image=nginx --dry-run=client -o yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        app: web
      name: web
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web
      strategy: {}
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: web
        spec:
          containers:
          - image: nginx
            name: nginx
            resources: {}
    status: {}
    [root@master kubectl-cmd]# 
              生成一个service文件
    [root@master kubectl-cmd]# kubectl apply -f deploy1.yaml 
    deployment.apps/web created
    [root@master kubectl-cmd]# kubectl expose deployment web --port=80 --type=NodePort --target-port=80  --name=web --dry-run=client -o yaml
    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: null
      labels:
        app: web
      name: web
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: web
      type: NodePort
    status:
      loadBalancer: {}
    [root@master kubectl-cmd]#
    
    3 有get 指令导出现有资源的yaml文件
    [root@master kubectl-cmd]# kubectl get deployment
    NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
    java-demo                3/3     3            3           22h
    nfs-client-provisioner   1/1     1            1           7d20h
    web                      1/1     1            1           6m6s
    [root@master kubectl-cmd]# 
    [root@master kubectl-cmd]# 
    [root@master kubectl-cmd]# kubectl get deployment java-demo -o yaml --export
    
    
    查看当前k8s系统中资源类型的缩写
    [root@master kubectl-cmd]# kubectl  api-resources
    
    
    查看某一资源层级下有哪些资源可以使用
                 kubectl explain <type>.<fieldName>[.<fieldName>]
    [root@master kubectl-cmd]# kubectl explain deployment.spec.template.spec.containers
    [root@master kubectl-cmd]# kubectl explain pods.spec.containers
    
    指令补全功能
    [root@master kubectl-cmd]# yum search bash-comp
    [root@master kubectl-cmd]# yum install -y bash-completion.noarch
    [root@master kubectl-cmd]# source /usr/share/bash-completion/bash_completion 
    [root@master kubectl-cmd]# source <(kubectl completion bash)
    [root@master kubectl-cmd]# 
    

      

     

  • 相关阅读:
    POJ_1990 MooFest 【树状数组】
    POJ_3468 A Simple Problem with Integers 【线段树区间查询+修改】
    POJ_3268 Silver Cow Party 【最短路】
    C. Ayoub and Lost Array Round #533 (Div. 2) 【DP】
    windows使用putty向远程服务器传送文件
    Linux下如何将文件下载到指定目录
    JS DOM对象
    JS 流程控制
    JS 运算符
    JS 变量及常量
  • 原文地址:https://www.cnblogs.com/sven-pro/p/15259059.html
Copyright © 2011-2022 走看看