Kubernetes(k8s)基础之三:K8s常用命令

news/2024/7/7 20:48:29

目录

kubectl的基本命令

k8s常用操作命令

k8s常用命令操作示例

资源管理

命令式对象管理 kubectl命令

资源类型

查看k8s对象状态

k8s对象配置

k8s容器编排配置文件模板

1. deployment

相关使用

创建deployment

更新deployment

回退deployment

暂停和恢复deployment

2 namespace

3 pod

4 label

5 service


kubectl的基本命令

kubectl annotate – 更新资源的注解。
kubectl api-versions – 以“组/版本”的格式输出服务端支持的API版本。
kubectl apply – 通过文件名或控制台输入,对资源进行配置。
kubectl attach – 连接到一个正在运行的容器。
kubectl autoscale – 对replication controller进行自动伸缩。
kubectl cluster-info – 输出集群信息。
kubectl config – 修改kubeconfig配置文件。
kubectl create – 通过文件名或控制台输入,创建资源。
kubectl delete – 通过文件名、控制台输入、资源名或者label selector删除资源。
kubectl describe – 输出指定的一个/多个资源的详细信息。
kubectl edit – 编辑服务端的资源。
kubectl exec – 在容器内部执行命令。
kubectl expose – 输入replication controller,service或者pod,并将其暴露为新的kubernetes service。
kubectl get – 输出一个/多个资源。
kubectl label – 更新资源的label。
kubectl logs – 输出pod中一个容器的日志。
kubectl namespace -(已停用)设置或查看当前使用的namespace。
kubectl patch – 通过控制台输入更新资源中的字段。
kubectl port-forward – 将本地端口转发到Pod。
kubectl proxy – 为Kubernetes API server启动代理服务器。
kubectl replace – 通过文件名或控制台输入替换资源。
kubectl rolling-update – 对指定的replication controller执行滚动升级。
kubectl run – 在集群中使用指定镜像启动容器。
kubectl scale – 为replication controller设置新的副本数。
kubectl stop – (已停用)通过资源名或控制台输入安全删除资源。
kubectl version – 输出服务端和客户端的版本信息。
kubectl cordon 设定node不可使用
kubectl uncordon 设定node可以使用
kubectl drain 设定node进入维护模式

#查看所有命名空间的pod:
kubectl get po -o wide --all-namespaces

#查看所有命名空间的rc(其他资源类似,把rc换成其他资源即可):
kubectl get rc -o wide --all-namespaces

#查看kube-system命名空间的pod:
kubectl get po -o wide -n kube-system

#查看defalut命名空间的pod(default命名空间的可以省略 -n default,其他资源也一样):
kubectl get po -o wide

#根据yaml文件创建资源:
kubectl apply -f aaa.yaml   # 可重复使用,不报错
 或
kubectl create -f aaa.yaml  # 重复使用会报错

#根据yaml文件删除创建资源:
kubectl delete -f aaa.yaml

#获取pod(这里以kube-proxy-7gkfk为例,kube-proxy-7gkfk是pod名字)详细信息:
kubectl describe po kube-proxy-7gkfk -n kube-system

#获取某rc(这里以mysql为例,mysql是rc名字)详细信息:
kubectl describe rc mysql

#查看某pod(这里以etcd-see-k8s-master1为例,etcd-see-k8s-master1为pod名字)日志:
kubectl logs etcd-see-k8s-master1 -n kube-system

#查看帮助
kubectl help

k8s常用操作命令

[root@k8s-master opt]# kubectl --help
kubectl controls the Kubernetes cluster manager.

 Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

# 基本命令初级
Basic Commands (Beginner):
  create        Create a resource from a file or from stdin.
  expose        使用 replication controller, service, deployment 或者 pod 并暴露它作为一个 新的 Kubernetes
Service
  run           在集群中运行一个指定的镜像
  set           为 objects 设置一个指定的特征
# 基本命令中级
Basic Commands (Intermediate):
  explain       查看资源的文档
  get           显示一个或更多 resources
  edit          在服务器上编辑一个资源
  delete        Delete resources by filenames, stdin, resources and names, or by resources and label selector

#  控制器部署命令
Deploy Commands:
  rollout       Manage the rollout of a resource
  scale         Set a new size for a Deployment, ReplicaSet or Replication Controller
  autoscale     Auto-scale a Deployment, ReplicaSet, StatefulSet, or ReplicationController

# 集群管理
Cluster Management Commands:
  certificate   修改 certificate 资源.
  cluster-info  显示集群信息
  top           显示 Resource (CPU/Memory) 使用.
  cordon        标记 node 为 unschedulable
  uncordon      标记 node 为 schedulable
  drain         Drain node in preparation for maintenance
  taint         更新一个或者多个 node 上的 taints

# 故障排除和调试命令
Troubleshooting and Debugging Commands:
  describe      显示一个指定 resource 或者 group 的 resources 详情
  logs          输出容器在 pod 中的日志
  attach        Attach 到一个运行中的 container
  exec          在一个 container 中执行一个命令
  port-forward  Forward one or more local ports to a pod
  proxy         运行一个 proxy 到 Kubernetes API server
  cp            复制 files 和 directories 到 containers 和从容器中复制 files 和 directories.
  auth          Inspect authorization
  debug         Create debugging sessions for troubleshooting workloads and nodes

#高级命令
Advanced Commands:
  diff          Diff live version against would-be applied version
  apply         通过文件名或标准输入流(stdin)对资源进行配置
  patch         Update field(s) of a resource
  replace       通过 filename 或者 stdin替换一个资源
  wait          Experimental: Wait for a specific condition on one or many resources.
  kustomize     Build a kustomization target from a directory or URL.
# 设置
Settings Commands:
  label         更新在这个资源上的 labels
  annotate      更新一个资源的注解
  completion    Output shell completion code for the specified shell (bash or zsh)

# 其他命令
Other Commands:
  api-resources Print the supported API resources on the server
  api-versions  Print the supported API versions on the server, in the form of "group/version"
  config        修改 kubeconfig 文件
  plugin        Provides utilities for interacting with plugins.
  version       输出 client 和 server 的版本信息

Usage:
  kubectl [flags] [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).

k8s常用命令操作示例

kubectl create deployment nginx111 --image=nginx:latest               # 创建应用
kubectl create deployment nginx111 --image=nginx:latest --replicas=6  # 创建应用并指定副本数量,默认副本数量为1
kubectl expose deployment nginx111 --port=80 --type=NodePort          # 暴露端口发布应用
kubectl get service    # 获取服务状态

资源管理

# 命令式对象管理:
  kubectl run nginx111 --image=nginx:latest --port=80              # 运行一个pod

# 通过配置文件创建应用
# 命令式对象配置: 不能重复使用,该命令重复使用会报错
  kubectl create -f nginx-pod.yml

# 声明式对象配置: 用于创建和更新资源,命令可以重复使用,支持目录操作--推荐
  kubectl apply -f nginx111.yml

命令式对象管理 kubectl命令

kubectl [command] [type] [name] [flag]
  command: 指定操作,create,get,delete
  type: 指定资源类型,deployment,pod,service
  name: 指定资源的名称,名称大小写敏感
  flags:指定额外可选的参数

# 示例:
  # 查看所有pods,nodes
  kubectl get pods --all-namespaces     # 查看所有名称空间所有的pod
  kubectl get pods -A                   # -A是--all-namespaces的简写
  kubeclt get po -A 
  kubectl get pods -A -o wide  #  长格式显示信息

  kubectl get nodes  # 获取所有节点信息

  # 查看某个pod
  kubectl get pod pod_name   # 默认查看default名称空间的pod
  kubectl get pod pod_name -n namespace_name # 查看指定名称空的pod
  kubectl get pod pod_name -o wide -n mamespace_name 
  kubectl get pods -o wide -n namespace_name 

  # 查看某个pod,以yml格式展示结果
  kubectl get pod pod_name -n namespace_name -o yaml   # 只展示结果不导出
  kubectl get pod pod_name -n namespace_name -o yaml > project_name.yaml  # 将结果已yaml文件导出

资源类型

kubectl --help                     # 查看帮助
  kubectl api-resources              # 查看api
  kubectl get ns                     # 获取名称空间
  kubectl get cs                     # 获取集群健康状态
  kubectl create namespace devlop    # 创建一个名称空间
  kubectl create ns  devlop          # ns为namespace简写
  kubectl create deployment nginx112 --image=nginx:latest -n devlop   # 在指定名称空间创建deployment
  kubectl get pods -n devlop
  kubectl describe pod nginx112-9d4fbf6bc-7twh5 -n devlop   # 描述某个pod的信息
  kubectl run pod --image=nginx:latest -n devlop            # 在指定名称空间运行一个pod
  kubectl get pods -n devlop                                # 获取指定名称空间的pods
  kubectl get svc -n devlop -o wide                         # 获取一个名称空间的service
  kubectl delete pod pod_name -n namespace                  # 删除一个pod
  kubectl delete pod/pod1_name pod/pod2_name -n namespace   # 删除多个pod
  kubectl delete deployment  deployment_name -n namespace          # 删除一个deployment
  kubectl delete deploy/deployment_name1 deploy/deployment_name2   # 删除多个deployment
  kubectl delete namespace ns_name                       # 删除一个名称空间
  kubectl delete namespace/ns_name1  namespace/ns_name2  # 删除多个名称空间
  kubectl delete ns/ns_name1  ns/ns_name2                # 删除多个名称空间

查看k8s对象状态

# 选项
  -n namespace  名称空间
  -A ALL
  kubectl get pod -A -o wide  

  # 描述资源信息
  # 语法格式
  kubectl describe  资源类型  资源名名称
  # 示例: kubectl describe pod  nginx-dev

  # 查看资源日志
  kubectl logs 显示pod中容器中的运行过程中产生的信息
  # 示例:kubectl logs nginx-dev -n dev

  # 进入容器内部
  kubectl exec -it 容器名称  /bin/bash(shell类型)  
  # 示例:  kubectl exec -it nginx-dev1 -n dev -- /bin/bash    # 默认进入pod的第一个容器

  # 更多操作查看kubectl exec --help 如下
  [root@k8s-master opt]# kubectl exec --help
Execute a command in a container.

Examples:
  # Get output from running 'date' command from pod mypod, using the first container by default
  kubectl exec mypod -- date

  # Get output from running 'date' command in ruby-container from pod mypod
  kubectl exec mypod -c ruby-container -- date

  # Switch to raw terminal mode, sends stdin to 'bash' in ruby-container from pod mypod
  # and sends stdout/stderr from 'bash' back to the client
  kubectl exec mypod -c ruby-container -i -t -- bash -il

  # List contents of /usr from the first container of pod mypod and sort by modification time.
  # If the command you want to execute in the pod has any flags in common (e.g. -i),
  # you must use two dashes (--) to separate your command's flags/arguments.
  # Also note, do not surround your command and its flags/arguments with quotes
  # unless that is how you would execute it normally (i.e., do ls -t /usr, not "ls -t /usr").
  kubectl exec mypod -i -t -- ls -t /usr

  # Get output from running 'date' command from the first pod of the deployment mydeployment, using the first container
by default
  kubectl exec deploy/mydeployment -- date

  # Get output from running 'date' command from the first pod of the service myservice, using the first container by
default
  kubectl exec svc/myservice -- date

Usage:
  kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] [options]

k8s对象配置

方法一 命令行 kubectl run nginx-dep1 --image=nginx:1.19.8   # 创建pod

方法二 网页 Dashboard 浏览器web界面创建pod
# 部署k8s Dashboard通过网页后台操作pod

方法三 通过 yml文件创建pod   
# 通过命令 kubectl apply -f ngx.yml 应用配置文件创建pod
# vim ngx.yml
apiVersion: v1              # api版本
kind: Namespace             # 资源类型是ns
metadata:                   # 元数据
  name: devp2021            # 名称空间命名
---
apiVersion: v1
kind: Pod                   # 资源类型是deployment
metadata:                   # 元数据
  name: nginxdep            # 指定名称
  namespace: devp2021       # 指定名称空间
spec:
  containers:
    - name: nginx2021       # 创建容器1
      image: nginx:latest
    - name: nginx2022       # 创建容器2
      image: nginx:latest
    - name: nginx2023       # 创建容器3
      image: nginx:latest
kubectl create -f ngx.yaml   # 只能执行一次,重复执行会报错
    [root@localhost yaml]# kubectl apply -f ngx.yaml 
    namespace/devp2021 created
    pod/nginxdep created

kubectl apply -f ngx.yaml    # 执行yml文件,可以执行多次,无改变的内容不会生效
    [root@localhost yaml]# kubectl apply -f ngx.yml 
    namespace/devp2021 unchanged
    pod/nginxdep unchanged

 kubectl delete -f ngx.yaml  # 删除资源,文件里有的都删除
     [root@localhost yaml]# kubectl delete -f ngx.yaml 
    namespace "devp2021" deleted
    pod "nginxdep" deleted

生成yml模板文件 用来启动容器

# 生成yaml配置文件
kubectl create deployment nginx --image=nginx:latest --dry-run -o yaml>nginx.yaml

# nginx.yaml文件如下,可根据需求修改相关参数
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.8
        name: nginx
        resources: {}
status: {}


  # 应用配置文件创建deployment
  kubectl create -f nginx.yaml  或者  kubectl apply -f nginx.yaml

生成yml模板文件,用来发布应用

# 生成配置文件
kubectl expose deployment nginx --port=80  --target-port=8080  --type=NodePort  --dry-run -o yaml>nginx_svc.yml

# nginx_svc.yml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: nginx
  type: NodePort
status:
  loadBalancer: {}


# 应用配置文件发布应用
kubectl expose -f nginx_svc.yml

# kubectl expose -h # 用法如下
# 适用对象  pod (po), service (svc), replicationcontroller (rc), deployment (deploy), replicaset (rs)

Examples:
  # Create a service for a replicated nginx, which serves on port 80 and connects to the containers on port 8000.
  kubectl expose rc nginx --port=80 --target-port=8000

  # Create a service for a replication controller identified by type and name specified in "nginx-controller.yaml",
which serves on port 80 and connects to the containers on port 8000.
  kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000

  # Create a service for a pod valid-pod, which serves on port 444 with the name "frontend"
  kubectl expose pod valid-pod --port=444 --name=frontend

  # Create a second service based on the above service, exposing the container port 8443 as port 443 with the name"nginx-https"
  kubectl expose service nginx --port=443 --target-port=8443 --name=nginx-https

  # Create a service for a replicated streaming application on port 4100 balancing UDP traffic and named 'video-stream'.
  kubectl expose rc streamer --port=4100 --protocol=UDP --name=video-stream

  # Create a service for a replicated nginx using replica set, which serves on port 80 and connects to the containers onport 8000.
  kubectl expose rs nginx --port=80 --target-port=8000

  # Create a service for an nginx deployment, which serves on port 80 and connects to the containers on port 8000.
  kubectl expose deployment nginx --port=80 --target-port=8000

Usage:  # 语法格式如下
  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]

k8s容器编排配置文件模板

1. deployment

Deployment为Pod和Replica Set下一代Replication Controller)提供声明式更新,示例如下:

apiVersion: apps/v1        # 1.9.0 之前的版本使用 apps/v1beta2,可通过命令 kubectl api-versions 查看
kind: Deployment               #指定创建资源的角色/类型
metadata:                      #资源的元数据/属性
  name: nginx-deployment       #资源的名字,在同一个namespace中必须唯一
  namespace: nginx-prod        #命名空间
  labels:     # 这里是定义Deployment的标签
    app: demo-prod             
spec:
  replicas: 6          #副本数量6
  strategy:
    rollingUpdate:     #由于replicas为6,则整个升级,pod个数在8-10个之间
      maxSurge: 1      #滚动升级时会先启动1个pod
      maxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数
  selector:             #定义标签选择器,部署需要管理的pod(带有该标签的的会被管理)需在pod 模板中定义
    matchLabels:
      app: demo-prod  # 选择关联Deployment标签
  template:      #这里Pod的定义
    metadata:
      labels:    #给Pod定义一个标签,方便其他服务关联这个Pod
        app: web-server
    spec:        # 模板的规范  
      containers:  
      - name: nginx      #容器的名字  
        image: nginx:1.19.8  #容器的镜像地址 
        command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]    #启动命令   
        args:                                                                #启动参数
            - '-storage.local.retention=$(STORAGE_RETENTION)'
            - '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'
            - '-config.file=/etc/prometheus/prometheus.yml'
            - '-alertmanager.url=http://alertmanager:9093/alertmanager'
            - '-web.external-url=$(EXTERNAL_URL)'
    #如果command和args均没有写,那么用Docker默认的配置。
    #如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。
    #如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。
    #如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。
        imagePullPolicy: IfNotPresent  
        # IfNotPresent :默认值,本地有则使用本地镜像,不拉取,如果不存在则拉取
        # Always:  总是拉取
        # Never:  只使用本地镜像,从不拉取
          livenessProbe:       
#表示container是否处于live状态。如果LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉container,并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为Success,如果container没有提供LivenessProbe,则也认为是Success;
            httpGet:
              path: /health #如果没有心跳检测接口就为/
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 60 ##启动后延时多久开始运行检测
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 5
            readinessProbe:
          readinessProbe:
            httpGet:
              path: /health #如果没有心跳检测接口就为/
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 30 ##启动后延时多久开始运行检测
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 5
          resources:              ##CPU内存限制
            requests:
              cpu: 2
              memory: 2048Mi
            limits:
              cpu: 2
              memory: 2048Mi
          env:                    ##通过环境变量的方式,直接传递pod=自定义Linux OS环境变量
            - name: LOCAL_KEY     #本地Key
              value: value
            - name: CONFIG_MAP_KEY  #局策略可使用configMap的配置Key,
              valueFrom:
                configMapKeyRef:
                  name: special-config   #configmap中找到name为special-config
                  key: special.type      #找到name为special-config里data下的key
          ports:
            - name: http
              containerPort: 8080 #对service暴露端口
          volumeMounts:     #挂载volumes中定义的磁盘
          - name: log-cache
            mount: /tmp/log
          - name: sdb       #普通用法,该卷跟随容器销毁,挂载一个目录
            mountPath: /data/media    
          - name: nfs-client-root    #直接挂载硬盘方法,如挂载下面的nfs目录到/mnt/nfs
            mountPath: /mnt/nfs
          - name: example-volume-config  #高级用法第1种,将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下,如果存在同名文件,直接覆盖。
            mountPath: /etc/config       
          - name: rbd-pvc                #高级用法第2中,挂载PVC(PresistentVolumeClaim)

#使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,
  volumes:  # 定义磁盘给上面volumeMounts挂载
  - name: log-cache
    emptyDir: {}
  - name: sdb  #挂载宿主机上面的目录
    hostPath:
      path: /any/path/it/will/be/replaced
  - name: example-volume-config  # 供ConfigMap文件内容到指定路径使用
    configMap:
      name: example-volume-config  #ConfigMap中名称
      items:
      - key: log-script           #ConfigMap中的Key
        path: path/to/log-script  #指定目录下的一个相对路径path/to/log-script
      - key: backup-script        #ConfigMap中的Key
        path: path/to/backup-script  #指定目录下的一个相对路径path/to/backup-script
  - name: nfs-client-root         #供挂载NFS存储类型
    nfs:
      server: 10.42.0.55          #NFS服务器地址
      path: /opt/public           #showmount -e 看一下路径
  - name: rbd-pvc                 #挂载PVC磁盘
    persistentVolumeClaim:
      claimName: rbd-pvc1         #挂载已经申请的pvc磁盘

相关使用

一个典型的用例如下: 使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。 然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。 扩容Deployment以满足更高的负载。 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。 根据Deployment 的状态判断上线是否hang住了。 清除旧的不必要的ReplicaSet

创建deployment

# 命令格式  kubectl create deployment名称 [参数]
# --image        指定的pod镜像
# --port         指定端口
# --replicas     指定pod数量
# --namespace    指定名称空间

# 命令创建deployment
kubectl create deployment nginx130 --image=nginx:latest --port=80 --replicas=3 --namespace=default
deployment.apps/nginx130 created

# 命令行删除deployment
[root@localhost yml]# kubectl delete deployment nginx111 -n default  # 删除deployment
deployment.apps "nginx111" deleted


# 通过yaml创建deployment
# 生成yaml文件
kubectl create deployment nginx132 --image=nginx:latest --port=80 --replicas=3 -n default --dry-run=client -o yaml > nginx-deployment.yml

# 根据yaml文件创建deployment
kubectl create -f  nginx-deployment.yaml --record       
#--record 为True  在annotation中记录当前命令创建或者升级了该资源,如查看在每个Deployment revision中执行了哪些命令
kubectl apply -f  nginx-deployment.yaml --record  

# 删除deployment
kubectl delete -f nginx-deployment.yaml

kubectl get deployments 
kubectl get rs                      #Replica Set的名字总是<Deployment的名字>-<pod template的hash值>
kubectl get pods  -n xxxx           #查看命名空间中的pod
kubectl get pods -n xxx  --show-labels      #查看标签

更新deployment

注意: Deployment的rollout当且仅当Deployment的pod template(例如.spec.template)中的label更新或者镜像更改时被触发。其他更新,例如扩容Deployment不会触发rollout.

# 使用命令更新镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1  -n xxx  #更新镜像

# 编辑配置文更新镜像
# 或使用edit命令来编辑Deployment,修改 .spec.template.spec.containers[0].image ,将nginx:1.7.9 改写成 nginx:1.9.1
kubectl edit deployment/nginx-deployment -n xxx 

kubectl rollout status deployment/nginx-deployment  -n xxx  # rollout 状态

回退deployment

# ====版本回退====
kubectl rollout   # 版本升级相关功能,支持以下选项
  status          # 显示当前升级状态
  history         # 显示升级历史记录
  pause           # 暂停版本升级过程
  resume          # 继续已经暂停的版本升级过程
  restart         # 重启版本升级过程
  undo            # 回滚到上以及版本[可以使用--to-revision回滚到指定版本]

# kubectl rollout history deployment/nginx-deployment -n xxx #检查升级记录
# kubectl rollout history deployment/nginx-deployment --revision=2  -n xxx  #查看version信息

[root@k8s-master1 yml]# kubectl apply -f podtest17.yml  --record=true   # 添加记录
deployment.apps/pc-deployment created

[root@k8s-master1 yml]# kubectl rollout status deploy pc-deployment -n devlop  # 显示升级状态
deployment "pc-deployment" successfully rolled out

[root@k8s-master1 yml]# kubectl rollout history deploy pc-deployment -n devlop  # 显示历史记录
deployment.apps/pc-deployment 
# 版本号  # 改变原因
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=podtest17.yml --record=true
2         kubectl apply --filename=podtest17.yml --record=true

[root@k8s-master1 yml]# kubectl rollout undo deploy pc-deployment --to-revision=1 -n devlop  # 回滚到版本1
deployment.apps/pc-deployment rolled back

[root@k8s-master1 yml]# kubectl rollout history deploy pc-deployment -n devlop   # 回滚后再次查看版本号
deployment.apps/pc-deployment 
REVISION  CHANGE-CAUSE
2         kubectl apply --filename=podtest17.yml --record=true
3         kubectl apply --filename=podtest17.yml --record=true

暂停和恢复deployment

# 金丝雀发布
# 更新的同时暂停更新,应用场景:测试新的pod,没问题继续更新,有问题直接回滚
[root@k8s-master1 yml]# kubectl set image deploy pc-deployment nginx2040=nginx:1.8 -n devlop && kubectl rollout pause  deploy pc-deployment -n devlop    
deployment.apps/pc-deployment paused

[root@k8s-master1 yml]# kubectl get rs -n devlop -o wide  # 查看rs
NAME                       DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES      SELECTOR
pc-deployment-7bb84c497b   7         7         7       13m   nginx2040    nginx:1.7   app=nginx-pod,pod-template-hash=7bb84c497b
pc-deployment-8b5965d45    5         5         5       14m   nginx2040    nginx:1.8   app=nginx-pod,pod-template-hash=8b5965d45

[root@k8s-master1 yml]# kubectl rollout status deploy pc-deployment -n devlop # 查看更新状态
Waiting for deployment "pc-deployment" rollout to finish: 5 out of 9 new replicas have been updated...

[root@k8s-master1 yml]# kubectl set image deploy pc-deployment nginx2040=nginx:1.7 -n devlop && kubectl rollout resume  deploy pc-deployment -n devlop   # 继续暂停的更新
deployment.apps/pc-deployment image updated
deployment.apps/pc-deployment resumed

2 namespace

# Namespace
# 命令行操作namespace
kubectl get ns               # 获取名称空间信息
kubectl get ns/default       # 获取指定名称空间信息
kubectl describe ns/default  # 描述名称空间信息
kubectl create ns devlop     # 创建名称空间
kubectl delete ns devlop     # 删除名称空间

# nsc.yml  # 使用文件创建和删除名称空间
apiVersion: v1              # api版本
kind: Namespace             # 资源类型是ns
metadata:                   # 元数据
  name: devp2022            # 名称空间命名

# 创建名称空间
kubectl create -f nsc.yml / kubectl apply -f nsc.yml
# 删除名称空间
kubectl delete -f nsc.yml

3 pod

# 命令行操作Pod
kubectl get pods -n kube-system    # 获取pod信息
# 命令格式: kubectl run (pod控制器名称)[参数]
# --image           指定pod的镜像
# --port            指定端口
# --namespace       指定名称空间

# 通过命令运行pod
kubectl run nginx2023 --image=nginx:latest --port=80 --namespace devlop
kubectl run nginx2023 --image=nginx:latest --port=80 -n devlop

# 使用yml文件创建pod
-------------------------
apiVersion: v1
kind: Pod
metadata:
  name: nginxapp     # 单独运行pod时必须保持name在名称空间中唯一
  namespace: devlop
spec:
  containers:
  - image: nginx:latest
    imagePullPolicy: IfNotPresent   # 拉取镜像策略
    name: nginx2030
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
-------------------------

# 创建pod
[root@localhost yml]# kubectl create -f podc.yml 
pod/nginxapp created
# 删除pod
[root@localhost yml]# kubectl delete -f podc.yml 
pod "nginxapp" deleted

4 label

[root@localhost yml]# kubectl get pods -n default --show-labels  # 获取标签信息
    NAME                        READY   STATUS    RESTARTS   AGE     LABELS
    nginx111-5774488586-mv68r   1/1     Running   0          7h23m   app=nginx111,pod-template-hash=5774488586

# 打标签,如果标签不存在则新增标签
[root@localhost yml]# kubectl label pod nginx111-5774488586-mv68r  -n default version=1.0  
    pod/nginx111-5774488586-mv68r labeled
# 再次获取标签信息
[root@localhost yml]# kubectl get pods --show-labels  
    NAME                        READY   STATUS    RESTARTS   AGE     LABELS
    nginx111-5774488586-mv68r   1/1     Running   0          7h26m   app=nginx111,pod-template-hash=5774488586,version=1.0

 # 更新标签,需要要是用--overwrite关键字
[root@localhost yml]# kubectl label pod nginx111-5774488586-mv68r -n default version=2.0 --overwrite 
    pod/nginx111-5774488586-mv68r labeled

# 根据版本标签进行筛选1
[root@localhost yml]# kubectl get pods -l "version=2.0" -n default --show-labels   
NAME                        READY   STATUS    RESTARTS   AGE     LABELS
nginx111-5774488586-mv68r   1/1     Running   0          7h32m   app=nginx111,version=2.0

# 根据版本标签进行筛选2
[root@localhost yml]# kubectl get pods -l "version!=2.0" -n default --show-labels   
NAME        READY   STATUS    RESTARTS   AGE     LABELS
nginx2021   1/1     Running   0          2m35s   run=nginx2021

# 删除version标签
[root@localhost yml]# kubectl label pod nginx202 -n default version-   
pod/nginx2021 labeled

# 使用yml文件创建带标签的pod
# podc2.yml
-----------------------------
apiVersion: v1
kind: Pod
metadata:
  # 注意labels下的键值对的值必须加引号
  labels:
    version: "1.8"
    env: "test"
  name: nginx333
  namespace: default
spec:
  containers:
  - image: nginx:latest
    name: nginx333
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
------------------------------

# 创建带标签的pod
[root@localhost yml]# kubectl apply -f podc.yml 
pod/nginx333 created

# 查询pod并显示标签
[root@localhost yml]# kubectl get pods -n default --show-labels
NAME                        READY   STATUS    RESTARTS   AGE     LABELS
nginx111-5774488586-mv68r   1/1     Running   0          7h46m   pod-template-hash=5774488586,version=2.0
nginx111-5774488586-vclkq   1/1     Running   0          11m     app=nginx111,pod-template-hash=5774488586
nginx2021                   1/1     Running   0          15m     run=nginx2021
nginx333                    1/1     Running   0          54s     env=test,version=1.8

# 根据标签筛选
[root@localhost yml]# kubectl get pods -l "version=1.8" -n default --show-labels  
NAME       READY   STATUS    RESTARTS   AGE    LABELS
nginx333   1/1     Running   0          2m2s   env=test,version=1.8

# 根据标签筛选
[root@localhost yml]# kubectl get pods -l "env=test" -n default --show-labels   
NAME       READY   STATUS    RESTARTS   AGE     LABELS
nginx333   1/1     Running   0          2m29s   env=test,version=1.8

# 根据标签筛选
[root@localhost yml]# kubectl get pods -l "env!=test" -n default --show-labels   
NAME                        READY   STATUS    RESTARTS   AGE     LABELS
nginx111-5774488586-mv68r   1/1     Running   0          7h48m   pod-template-hash=5774488586,version=2.0
nginx111-5774488586-vclkq   1/1     Running   0          13m     app=nginx111,pod-template-hash=5774488586
nginx2021                   1/1     Running   0          17m     run=nginx2021

# 根据标签类型筛选
[root@localhost yml]# kubectl get pods  -l "env" -n default --show-labels       
NAME       READY   STATUS    RESTARTS   AGE     LABELS
nginx333   1/1     Running   0          7m23s   env=test,version=1.8

 # 根据标签类型筛选
[root@localhost yml]# kubectl get pods  -l "version" -n default --show-labels  
NAME                        READY   STATUS    RESTARTS   AGE     LABELS
nginx111-5774488586-mv68r   1/1     Running   0          7h53m   pod-template-hash=5774488586,version=2.0
nginx333                    1/1     Running   0          7m28s   env=test,version=1.8

# 根据集合关系筛选
[root@localhost yml]# kubectl get pods  -l "version in (1.8,2.0)" -n default --show-labels  
NAME                        READY   STATUS    RESTARTS   AGE     LABELS
nginx111-5774488586-mv68r   1/1     Running   0          7h57m   pod-template-hash=5774488586,version=2.0
nginx333                    1/1     Running   0          11m     env=test,version=1.8

# 根据集合关系筛选
[root@localhost yml]# kubectl get pods  -l "version notin (1.8,2.0)" -n default --show-labels   
NAME                        READY   STATUS    RESTARTS   AGE   LABELS
nginx111-5774488586-vclkq   1/1     Running   0          22m   app=nginx111,pod-template-hash=5774488586
nginx2021                   1/1     Running   0          26m   run=nginx2021


【====扩展====】
# 显示pod中标签为app的pod
$ kubectl get pods -l "app" --show-labels

# 另外一种绝对性查询,key=value
等值关系: =、==、!=
$ kubectl get pods -l app[=|==|!=]myapp --show-labels

# 集合关系: KEY in (VALUE1,VALUE2...)
KEY not in (VALUE1,VALUE2...)
KEY
!KEY
$ kubectl get pods -l "release in (canary,beta,alpha)"
$ kubectl get pods -l "release notin (canary,beta,alpha)"


# ========================给节点增加标签========================
[root@localhost yml]# kubectl label node k8s-node1 disktype=ssd
node/k8s-node1 labeled

[root@localhost yml]# kubectl get nodes -l "disktype" 
NAME        STATUS   ROLES    AGE   VERSION
k8s-node1   Ready    <none>   9h    v1.20.2

# 使用yml通过node标签选择器运行容器到某个节点
# vim pod-demo.yml
--------------------------
apiVersion: v1    # 顶格写
kind: Pod         # 顶格写
metadata:         # 顶格写
  name: nginx-demo
  namespace: default
  # 注意labels下的键值对的值必须加引号
  labels:
    app: "myapp"
    tier: "frontend"
spec:             # 顶格写
  containers:
  - name: nginx115
    image: nginx: latest
    imagePullPolicy: IfNotPresent
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
  nodeSelector:
     # 这里的键值必须加引号
    disktype: "ssd"
# 这里定义了标签,那么Pod只会运行到k8s-node1节点上,因为只有node1节点有"disktype=ssd"标签

[root@localhost yml]# kubectl apply -f labeltest.yml 
pod/nginx-demo created

5 service

# Service服务

 # 命令行暴露service,ClusterIP只能集群内部访问
[root@localhost yml]# kubectl expose deployment nginx132 --name=svc-nginx132 --type=ClusterIP --port=80 --target-port=80 -n default     
service/svc-nginx132 exposed

[root@localhost yml]# kubectl get svc -n default
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP        10h
svc-nginx132   ClusterIP   10.109.72.203   <none>        80/TCP         11s

# 命令行暴露service,NodePort集群外部可访问
[root@localhost yml]# kubectl expose deployment nginx132 --name=svc133 --type=NodePort --port=80 --target-port=80 -n default                       
service/svc133 exposed

# 命令行删除service
[root@localhost yml]# kubectl delete svc nginx111 -n default   
service "nginx111" deleted

---------------------------
# 通过yml文件创建ClusterIP
# clusterip.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: "nginx132"  
  name: svc-nginx132
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx132   # Service 的selector 指定标签 app:nginx 来进行对Pod进行关联 ;(这里的app:nginx就是上面Deployment配置里labels定义的标签 )
  type: ClusterIP

# 创建Cluster
[root@localhost yml]# kubectl apply -f Clusteript.yml
service/svc-nginx134 created

# 删除Cluster
[root@localhost yml]# kubectl delete -f Clusteript.yml
service "svc-nginx134" deleted


---------------------------
# 通过yml创建NodePort
# nodeport.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: "nginx132"
  name: svc133
spec:
  ports:
  - port: 80        # 需要暴露的集群端口(service暴露的)
    targetPort: 80  # 容器的端口(后端容器提供服务的端口)
    protocol: TCP
  selector:
    app: nginx132
  type: NodePort
---------------------------

# 创建service
[root@localhost yml]# kubectl apply -f svct.yml  
service/svc135 created

# 删除service
[root@localhost yml]# kubectl delete -f svct.yml 
service "svc135" deleted

参考:

kubernetes(k8s)组件介绍及容器编排操作 (二) 


http://lihuaxi.xjx100.cn/news/55056.html

相关文章

基于PHP+小程序(MINA框架)+Mysql数据库的积分商城小程序系统设计与实现

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信小程序商城系统&#xff0c;前台用户使用小程序&#xff0c;小程序使用微信开发者工具开发&#xff1b;后台管理使用基PPMySql的B/S架构&#xff0c;开发工具使用phpstorm&#xff1b;通过后台添加商…

Teleport 内置组件 (传送门)

<Teleport> 接收一个 to prop 来指定传送的目标。to 的值可以是一个 CSS 选择器字符串&#xff0c;也可以是一个 DOM 元素对象。这段代码的作用就是告诉 Vue“把以下模板片段传送到 body 标签下”。 <button click"open true">Open Modal</button&g…

Chapter9.2:线性系统的状态空间分析与综合

本系列属于胡寿松《自动控制原理》(第七版)教材的课后习题精选,需要完整版课后习题答案的同学,请自行查找,本系列基本包含了自动控制原理的知识点,搭配胡寿松《自动控制原理》(第七版)知识点提炼使用,可用于期末考试甚至考研复习。 《自动控制原理》(第七版)知识点提炼 Ex…

Java 多线程概念

线程和进程区别 进程是程序执行的过程&#xff0c;线程是轻量级进程&#xff0c;程序执行的分支 进程是资源分配单位&#xff0c;线程是资源调度单位;线程是进程划分成的更小的运行单位&#xff1b;进程相互独立&#xff0c;同一进程中的线程可能会相互影响&#xff1b;线程执…

5.4 堆溢出利用(上)——DWORD SHOOT

目录 一、预备知识 二、实验环境 三、实验代码 四、实验步骤 一、预备知识 堆管理系统的三类操作&#xff1a;堆块分配、堆块释放和堆快合并归根结底都是对链表的修改。堆溢出利用的精髓就是用精心构造的数据溢出下一个堆块的块首&#xff0c;改写块首中的前向指针&#xf…

Leetcode-不同路径I和II(计数型动态规划)

目录 62.不同路径 第一步&#xff1a;确定状态 最后一步 子问题 第二步&#xff1a;确定初始状态和边界 第三步&#xff1a;计算顺序 代码实现 63.不同路径II 特殊情况分析 代码实现 62.不同路径 62.不同路径 本题使用动态规划来解决&#xff0c;符合计数型动态规划…

Docker之本地镜像发布到阿里云

目录 一、本地镜像发布到阿里云的流程 二、镜像的生成方法 三、将本地镜像推送到阿里云 3.1、登陆阿里云 3.2、点击右上角的控制台 3.3、点击镜像服务 3.4、点击个人实例 3.5、点击命名空间 3.6、创建命名空间 3.7、点击镜像仓库 3.8、创建镜像仓库 3.9、点击本地…

VL9 使用子模块实现三输入数的大小比较

写在前面 这个专栏的内容记录的是Verilog题库刷题过程&#xff0c;附带RTL\TestBench&#xff0c;并进行代码覆盖率收集。该题库算是一个Verilog宝藏刷题网站了&#xff0c;提供在线仿真环境&#xff08;题库&#xff09;&#xff0c;<刷题记录>专栏&#xff0c;持续打卡…