当前位置 博文首页 > asd1358355022的博客:指令很全的K8s学习笔记

    asd1358355022的博客:指令很全的K8s学习笔记

    作者:[db:作者] 时间:2021-08-04 21:46

    常用指令

    Kubectl命令行管理对象
    类型 命令 描述
    基础命令
    create 通过文件名或标准输入创建资源。
    expose 将一个资源公开为一个新的Kubernetes服务。
    run
    创建并运行一个特定的镜像,可能是副本。
    创建一个deployment或job管理创建的容器。
    set 配置应用资源。
    修改现有应用程序资源。
    get 显示一个或多个资源。
    explain 文档参考资料。
    edit 使用默认的编辑器编辑一个资源。
    delete 通过文件名、标准输入、资源名称或标签选择器来删除资源。
    部署命令
    rollout 管理资源的发布。
    rolling-update 执行指定复制控制的滚动更新。
    scale 扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job。
    autoscale 创建一个自动选择扩容或缩容并设置Pod数量。
    集群管理命令
    certificate 修改证书资源。
    cluster-info 显示集群信息。
    top 显示资源(CPU/Memory/Storage)使用。需要Heapster运行。
    cordon 标记节点不可调度。
    uncordon 标记节点可调度。
    drain 维护期间排除节点。
    taint
    --------------------------------------
    Kubectl命令行管理对象
    类型 命令 描述
    故障诊断和调试命令
    describe 显示特定资源或资源组的详细信息。
    logs 在pod或指定的资源中容器打印日志。如果pod只有一个容器,容器名称是可选的。
    attach 附加到一个进程到一个已经运行的容器。
    exec 执行命令到容器。
    port-forward 转发一个或多个本地端口到一个pod。
    proxy 为kubernetes API Server启动服务代理。
    cp 拷贝文件或目录到容器中。
    auth 检查授权。
    高级命令
    apply 通过文件名或标准输入对资源应用配置。
    patch 使用补丁修改、更新资源的字段。
    replace 通过文件名或标准输入替换一个资源。
    convert 不同的API版本之间转换配置文件。YAML和JSON格式都接受。
    设置命令
    label 更新资源上的标签。
    annotate 在一个或多个资源上更新注释。
    completion 用于实现kubectl工具自动补全。
    其他命令
    api-versions 打印受支持的API版本。
    config 修改kubeconfig文件(用于访问API,比如配置认证信息)。
    help 所有命令帮助。
    plugin 运行一个命令行插件。
    version 打印客户端和服务版本信息
    ------------------------------------
    Kubectl命令行管理对象
    示例:
    # 运行应用程序
    kubectl run hello-world --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80
    # 显示有关Deployments信息
    kubectl get deployments hello-world
    kubectl describe deployments hello-world
    # 显示有关ReplicaSet信息
    kubectl get replicasets
    kubectl describe replicasets
    # 创建一个Service对象暴露Deployment(在88端口负载TCP流量)
    kubectl expose deployment hello-world --port=88 --type=NodePort --target-port=80 --name=example-service
    # 创建一个Service对象暴露Deployment(在4100端口负载UDP流量)
    kubectl expose deployment hello-world --port=4100 --type=NodePort --protocol=udp --target-port=80 --
    name=example-service
    # 显示有关Service信息
    kubectl describe services example-service
    # 使用节点IP和节点端口访问应用程序
    curl http://<public-node-ip>:<node-port>
    
    #根据端口查询服务
    netstat -anpt | grep : 端口号
    
    #ingress查看
    kubectl get svc -n ingress-ngnix
    
    #获取configmap
    kubuvtl get cm
    
    #configmap详细信息
    kubectl describe cm configmap名称
    
    #修改configmap
    kubectl edit configmap configmap名称
    
    #阿里云时间同步服务器
    ntpdate ntp1.aliyun.com
    
    #获取pv
    kubectl get pv
    
    #获取pvc
    kubectl get pvc
    
    #获取指定pv的内容输出格式为yaml
    kubectl get pv pv名称 -o yaml
    
    #修改内容
    kubectl edit pv pv名称
    
    
    
    #通过 kubectl replace 命令完成对Node 状态的修改
    [root@master node]# kubectl replace -f unschedule_node.yaml 
    node/192.168.0.222 replaced
    [root@master node]# kubectl get nodes
    NAME            STATUS                     ROLES     AGE       VERSION
    192.168.0.144   Ready                      <none>    25d       v1.11.6
    192.168.0.148   Ready                      <none>    25d       v1.11.6
    192.168.0.222   Ready,SchedulingDisabled   <none>    5d        v1.11.6
    
    #查看Node的状态,可以观察到在Node的状态中增加了一项SchedulingDisabled,对于后续创建的Pod,系统将不会再向该Node进行调度。也可以不使用配置文件,直接使用 kubectl patch 命令完成:
    kubectl patch node k8s-node-1 -p '{"spec": {"unschedulaable": true}}'
    #需要注意的是,将某个Node脱离调度范围时,在其上运行的pod并不会自动停止,管理员需要手动停止在改Node是上运行的pod.
    #同样,如果需要将某个node重新纳入集群调度范围,则将unschedulable 设置为false,再次执行 kubectl replace 或者kubectl  patch 命令就能恢复系统对改node的调度。
    
    #第三种方法:
    #使用kubectl cordon <node_name> 对某个Node 进行隔离调度操作
    [root@master node]# kubectl cordon 192.168.0.148
    node/192.168.0.148 cordoned
    [root@master node]# kubectl get nodes
    NAME            STATUS                     ROLES     AGE       VERSION
    192.168.0.144   Ready                      <none>    25d       v1.11.6
    192.168.0.148   Ready,SchedulingDisabled   <none>    25d       v1.11.6
    192.168.0.222   Ready,SchedulingDisabled   <none>    5d        v1.11.6
    
    #恢复调度操作:
    [root@master node]# kubectl uncordon 192.168.0.222
    node/192.168.0.222 uncordoned
    [root@master node]# kubectl get nodes
    NAME            STATUS    ROLES     AGE       VERSION
    192.168.0.144   Ready     <none>    25d       v1.11.6
    192.168.0.148   Ready     <none>    25d       v1.11.6
    192.168.0.222   Ready     <none>    5d        v1.11.6
    
    #创建命名空间
    kubectl create namespace 名称
    
    #获取命名空间
    kubectl get namespace
    
    #删除命名空间
    kubectl delete namespace 名称
    
    
    #获取目前API接口信息
    kubectl   api-resources
    
    #对运行时容器进行修改
    kubectl patch pod rc-容器app名称-kpiqt -p
    
    #对副本扩缩容
    kubectl scale rc rc-容器app名称 —replicas=扩缩容数量
    
    #pod对副本自动进行扩缩容
    kubectl autoscale rc rc-容器app名称 --min=1 --max=4
    
    kubectl常用命令:
    kubectl cluster-info #查看集群信息
    
    kubectl describe pod -n kube-system kube-flannel-ds-amd64-trpqq #查看pod的描述信息
    
    kubectl get pods -n kube-system #查看指定命名空间的pod
    
    kubectl create deployment NAME --image=image [--dry-run] [options] #创建deployment, dry-run为true就是测试不执行
    
    kubectl create serviceaccount admin -o yaml --dry-run #针对所有可以用kubectl create 创建的资源,都可以加 -o yaml --dry-run ,用来导出yaml标准格式的文件。
    
    kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP
    
    #为deployment创建service, --name为service的名字, --port为暴露端口, --target-port为目标pod端口
    
    dig -t A nginx.default.svc.cluster.local @10.96.0.10 #验证是否能正确解析service, @后边的ip为k8s的dns地址
    
    kubectl describe svc nginx #查看名为nginx的这个service的详细信息
    
    kubectl get pods --show-labels #查看pod的标签
    
    kubectl scale deployment nginx-deploy --replicas=3 #扩容或缩容, --replicas为数量
    
    wget -O - -q nginx-deploy
    
    kubectl rollout undo deployment myapp-deploy --to-revision=1 #回滚到指定版本, 默认回滚到上一版本
    
    kubectl explain pod #查看pod用法的详细信息(参数选项等)
    

    kubectl指令使用

    kubectl工具的使用
    
            #创建
            kubectl run nginx --replicas=3 --labels="app=nginx-example" --image=nginx:1.17.4 --port=80
    
            #查看
            kubectl get deploy
            kubectl get pods --show-labels
            kubectl get pods -l app=example
            kubectl get pods -o wide
    
            #发布
            kubectl expose deployment nginx --port=88 --type=NodePort --tartget-port=80 --name=nginx-service 
            kubectl describe service nginx-service
    
            #故障排查
            kubectl describe TYPE NAME_PREFIX
            kubectl logs nginx-xxx
            kubectl exec -it nginx-xxx bash
    
            #更新 
            kubectl set image deployment/nginx nginx=nginx:1.17.4 
            或 
            kubectl edit deployment/nginx
    
            #资源发布管理
            kubectl rollout status deployment/nginx
            kubectl rollout history deployment/nginx
            kubectl rollout history deployment/nginx --revision=3 kubectl scale deployment nginx --replicas=10
    
            #回滚 
            kubectl rollout undo deployment/nginx-deployment
            kubectl rollout undo deployment/nginx-deployment --to-revision=3
    
            #删除
            kubectl delete deploy/nginx
            kubectl delete svc/nginx-service
    
            #写yaml文件用到的api
            #定义配置时,指定最新稳定版API(当前为v1)
            kubectl api-versions
    

    K8S创建的相关yaml文件

    一、K8S-yaml的使用及命令

    YAML配置文件管理对象
    对象管理:
    # 创建deployment资源
    kubectl create -f nginx-deployment.yaml
    # 查看deployment
    kubectl get deploy
    # 查看ReplicaSet
    kubectl get rs
    # 查看pods所有标签
    kubectl get pods --show-labels
    # 根据标签查看pods
    kubectl get pods -l app=nginx
    # 滚动更新镜像
    kubectl set image deployment/nginx-deployment nginx=nginx:1.11
    或者
    kubectl edit deployment/nginx-deployment
    或者
    kubectl apply -f nginx-deployment.yaml
    # 实时观察发布状态:
    kubectl rollout status deployment/nginx-deployment
    # 查看deployment历史修订版本
    kubectl rollout history deployment/nginx-deployment
    kubectl rollout history deployment/nginx-deployment --revision=3
    # 回滚到以前版本
    kubectl rollout undo deployment/nginx-deployment
    kubectl rollout undo deployment/nginx-deployment --to-revision=3
    # 扩容deployment的Pod副本数量
    kubectl scale deployment nginx-deployment --replicas=10
    # 设置启动扩容/缩容
    kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80
    

    二、POD

    实例1:三种策略

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-test
      labels:
         os: centos
    spec:
      containers:
      - name: hello
        image: centos:7
        env:
        - name: Test
          value: "123456"
        command: ["bash","-c","while true;do date;sleep 1;done"]
      restartPolicy: OnFailure
    
    
    支持三种策略:
    Always:当容器终止退出后,总是重启容器,默认策略。
    OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
    Never:当容器终止退出,从不重启容器。
    

    实例2:数据持久化和共享

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-test1
      labels:
         test: centos
    spec:
      containers:
      # 第一个容器
      - name: hello-write
        image: centos:7
        command: ["bash","-c","for i in {1..1000};do echo $i >> /data/hello;sleep 1;done"]
      # 第二个容器
      - name: hello-read
        image: centos:7
        command: ["bash","-c","for i in {1..1000};do cat $i >> /data/hello;sleep 1;done"]
        volumeMounts:
          - name: data
            mountPath: /data
      # 数据卷
      volumes:
      - name: data
        hostPath:
          path: /data
    

    实例3:pod的端口映射

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-pod
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.10
        ports:
        - name: http
          containerPort: 80
          hostIP: 0.0.0.0
          hostPort: 80
          protocol: TCP
        - name: https
          containerPort: 443
          hostIP: 0.0.0.0
          hostPort: 443
          protocol: TCP
    

    实例4

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-pod
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.10
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /index.html
            port: 80
    

    详细解析

    apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中  
    kind: Pod #指定创建资源的角色/类型  
    metadata: #资源的元数据/属性  
      name: web04-pod #资源的名字,在同一个namespace中必须唯一  
      labels: #设定资源的标签,详情请见http://blog.csdn.net/liyingke112/article/details/77482384
        k8s-app: apache  
        version: v1  
        kubernetes.io/cluster-service: "true"  
      annotations:            #自定义注解列表  
        - name: String        #自定义注解名字  
    spec:#specification of the resource content 指定该资源的内容  
      restartPolicy: Always #表明该容器一直运行,默认k8s的策略,在此容器退出后,会立即创建一个相同的容器  
      nodeSelector:     #节点选择,先给主机打标签kubectl label nodes kube-node1 zone=node1  
        zone: node1  
      containers:  
      - name: web04-pod #容器的名字  
        image: web:apache #容器使用的镜像地址  
        imagePullPolicy: Never #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,
                               # Always,每次都检查
                               # Never,每次都不检查(不管本地是否有)
                               # IfNotPresent,如果本地有就不检查,如果没有就拉取
        command: ['sh']