美文网首页DevOps
k8s命令总结

k8s命令总结

作者: 123_a428 | 来源:发表于2023-06-07 20:00 被阅读0次

    kubectl命令解释

    kubectl [command] [type] [name] [flags]
    
    **comand**:指定要对资源执行的操作,例如create、get、delete
    
    **type**:指定资源类型,比如deployment、pod、service
    
    **name**:指定资源的名称,名称大小写敏感
    
    **flags**:指定额外的可选参数
    

    输出示例

    #进入POD里面输入 pod名称 和 命名空间名称
    kubectl exec -it 【pod_name】 -n 【dev】 /bin/bash
    
    #查看pod日志 pod名称 和 命名空间名称
    kubectl logs 【pod_name】  -n 【dev】
    
    # 查看所有pod
    kubectl get pod -n dev
    
    # 查看某个pod
    kubectl get pod pod-name -n dev
    
    # 查看某个pod,以yaml格式展示结果
    kubectl get pod pod-name -o yaml
    

    命令式操作:namespace/pod的创建和删除

    命名空间namespace简写ns:相当于是一个小房间,与其他空间进行隔离
    -n 代表指定空间

    #查看namespce
    [root@k8s-master ~]# kubectl get ns
    #创建namespce
    [root@k8s-master ~]# kubectl create ns dev
    #在dev空间下创建指定nginx版本
    [root@k8s-master ~]# kubectl run pod --image=nginx:1.17.1 -n dev 
    #查看dev空间下创建的nginx-pod
    [root@k8s-master ~]# kubectl get pod -n dev
    

    [图片上传失败...(image-7f1f32-1686225583254)]

    #删除dev下面的pod
    [root@k8s-master ~]# kubectl delete pod pod-cbb995bbf-729tp -n dev
    #删除dev命名空间
    [root@k8s-master ~]# kubectl delete ns dev
    

    [图片上传失败...(image-6bcfe9-1686225583254)]

    命令+yaml操作:namespace/pod的创建和删除

    说明:指定namespace空间名为dev,指定pod名为nginxpod,在空间dev下,指定容器名称和镜像版本

    #创建一个nginxpod.yaml文件
    apiVersion: v1
    kind: Namespace
    metadata:
      name: dev
    
    ---
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginxpod
      namespace: dev
    spec:
      containers:
      - name: nginx-containers
        image: nginx:latest
    
    #创建
    [root@k8s-master ~]# kubectl create -f nginxpod.yaml 
    #查看
    [root@k8s-master ~]# kubectl get -f nginxpod.yaml 
    #删除
    [root@k8s-master ~]# kubectl delete -f nginxpod.yaml
    

    [图片上传失败...(image-1bc03c-1686225583254)]

    命令apply+yaml操作:namespace/pod创建

    kubectl apply -f nginxpod.yaml
    

    如果资源不存在,就创建,相当于 kubectl create
    如果资源已存在,就更新,相当于 kubectl patch
    [图片上传失败...(image-4cb4cf-1686225583255)]

    扩展:kubectl如果想要在node节点上运行,需要把 ~/.kube 目录下的文件都拷贝到节点上

    [root@k8s-master ~]# ls ~/.kube
    [root@k8s-master ~]# scp -r ~/.kube node01:~/
    

    namespace简称ns

    主要作用是实现多套环境的资源隔离或者多租户的资源隔离

    #查看所有命名空间
    [root@k8s-master ~]# kubectl get ns
    #创建dev空间
    [root@k8s-master ~]# kubectl create ns dev
    #查看dev空间
    [root@k8s-master ~]# kubectl get ns dev
    #删除dev空间
    [root@k8s-master ~]# kubectl delete ns dev
    
    
    #查看ns详情  命令:kubectl describe ns ns名称
    [root@master ~]# kubectl describe ns default
    Name:         default
    Labels:       <none>
    Annotations:  <none>
    Status:       Active  # Active 命名空间正在使用中  Terminating 正在删除命名空间
    
    # ResourceQuota 针对namespace做的资源限制
    # LimitRange针对namespace中的每个组件做的资源限制
    No resource quota.
    No LimitRange resource.
    

    yaml配置方式

    apiVersion: v1
    kind: Namespace
    metadata:
      name: dev
    

    Pod

    Pod是k8s集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。

    Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。

    # 创建并运行
    # 命令格式: kubectl run (pod控制器名称) [参数] 
    # --image  指定Pod的镜像
    # --port   指定端口
    # --namespace  指定namespace
    kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace=dev
    #查看pod信息
    kubectl get pod -n dev
    #查看pod运行的节点IP等信息
    kubectl get pod -n dev -o wide
    #查看pod运行日志
    kubectl logs nginx -n dev
    #用describe分析pod启动相关信息
    kubectl describe  pod nginx -n dev
    #查看dev空间下的deploy名称
    kubectl get deploy -n dev
    #删除dev空间下nginx1的deploy,对应的pod就被删除了
    kubectl delete deploy nginx1  -n dev
    

    yaml配置方式

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: dev
    spec:
      containers:
      - image: nginx:latest
        name: pod
        ports:
        - name: nginx-port
          containerPort: 80
          protocol: TCP
    

    Lable

    Label作用就是在资源上添加标识,用来对它们进行区分和选择
    标签需要 key=value

    #查看dev空间下的pod标签
    kubectl get pod -n dev --show-labels
    #添加标签为 version=1.0
    kubectl label pod nginx -n dev  version=1.0
    #更新标签 version=2.0 
    kubectl label pod nginx -n dev  version=2.0 --overwrite
    #筛选标签等于 version=2.0 的
    kubectl get pod -n dev -l version=2.0 --show-labels
    #删除标签 version
    kubectl label pod nginx -n dev version-
    

    yaml配置方式

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: dev
      labels:
        version: "3.0" 
        env: "test"
    spec:
      containers:
      - image: nginx:latest
        name: pod
        ports:
        - name: nginx-port
          containerPort: 80
          protocol: TCP
    

    Deployment简称deploy

    k8s中Pod控制器的种类有很多,Deployment是其中一种

    # 命令格式: kubectl create deployment名称  [参数] 
    # --image  指定pod的镜像
    # --port   指定端口
    # --replicas  指定创建pod数量
    # --namespace  指定namespace
    # 创建一个deploy名字为nginx 镜像是nginx:latest 端口80  pod副本数replicas=3 空间dev
    kubectl run nginx --image=nginx:latest --port=80 --replicas=3 -n dev
    #查看deploy,pod
    kubectl get deploy,pod -n dev
    #查看deploy详细信息
    kubectl describe deploy nginx -n dev
    #删除delpoy后,下面的pod也都会删除
    kubectl delete deploy nginx -n dev
    

    yaml配置方式

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      namespace: dev
    spec:
      replicas: 3
      selector:
        matchLabels:
          run: nginx
      template:
        metadata:
          labels:
            run: nginx
        spec:
          containers:
          - image: nginx:latest
            name: nginx
            ports:
            - containerPort: 80
              protocol: TCP
    

    Service简称svc

    Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。

    #创建svc集群内网访问  --type=ClusterIP
    #暴露svc 暴露deploy名称是:nginx的 svc名称设置为:svc-nginx1 类型是:ClusterIP 端口:80 目标端口:80
    kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev
    
    #创建svc集群外网访问  --type=NodePort
    kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev
    
    #查看vc
    kubectl get svc -n dev
    #删除svc
    kubectl delete svc svc-nginx1 -n dev
    

    yaml配置方式

    apiVersion: v1
    kind: Service
    metadata:
      name: svc-nginx
      namespace: dev
    spec:
      clusterIP: 10.109.179.232 #固定svc的内网ip
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: nginx
      type: ClusterIP
    

    镜像拉取说明

    创建pod-imagepullpolicy.yaml文件

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-imagepullpolicy
      namespace: dev
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        imagePullPolicy: Never # 用于设置镜像拉取策略
      - name: busybox
        image: busybox:1.30
    

    imagePullPolicy,用于设置镜像拉取策略,kubernetes支持配置三种拉取策略:

    • Always:总是从远程仓库拉取镜像(一直远程下载)
    • IfNotPresent:本地有则使用本地镜像,本地没有则从远程仓库拉取镜像(本地有就本地 本地没远程下载)
    • Never:只使用本地镜像,从不去远程仓库拉取,本地没有就报错 (一直使用本地)

    默认值说明:

    如果镜像tag为具体版本号, 默认策略是:IfNotPresent

    如果镜像tag为:latest(最终版本) ,默认策略是always

    进入kubectl的pod下面的容器命令

    # 命令: kubectl exec  pod名称 -n 命名空间 -it -c 容器名称 /bin/sh  
    # 使用这个命令就可以进入某个容器的内部,然后进行相关操作了
    [root@k8s-master01 pod]# kubectl exec pod-busybox -n dev -it -c busybox /bin/sh
    

    相关文章

      网友评论

        本文标题:k8s命令总结

        本文链接:https://www.haomeiwen.com/subject/vfkmedtx.html