• kubernetes命令入门(namespaces,pods)


    1 nameSpace介绍

    ​ namespace的中文名称是命名空间。 你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 可以为你提供组织,安全甚至性能方面的帮助!

    ​ namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等则不属于任何namespace。

    ​ 大多数的Kubernetes中的集群默认会有一个叫default的namespace。实际上,应该是4个:

    ​ 1,default:你的资源默认被创建于default命名空间。

    ​ 2,kube-system:kubernetes系统组件使用。

    ​ 3,kube-node-lease: kubernetes集群节点租约状态,v1.13加入

    ​ 4,kube-public:公共资源使用。但实际上现在并不常用。

    ​ 这个默认(default)的namespace并没什么特别,但你不能删除它。这很适合刚刚开始使用kubernetes和一些小的产品系统。但不建议应用于大型生产系统。因为,这种复杂系统中,团队会非常容易意外地或者无意识地重写或者中断其他服务service。相反,请创建多个命名空间来把你的service(服务)分割成更容易管理的块。

    ​ 作用:多租户情况下,实现资源隔离:属于逻辑隔离;属于管理边界;不属于网络边界;可以针对每个namespace做资源配额。

    1.1 查看命名空间

    #查看命名空间全拼
    [root@k8s-master ~]# kubectl get namespaces
    #查看命名空间简写
    [root@k8s-master ~]# kubectl get ns
    
    • 1
    • 2
    • 3
    • 4

    ​ 查看命名空间下面的pod:

    [root@k8s-master ~]# kubectl get pod --all-namespaces
    [root@k8s-master ~]# kubectl get pod -A
    
    • 1
    • 2

    ​ 默认的命名空间有如下:

    default 用户创建的pod默认在此命名空间 
    kube-public 所有用户均可以访问,包括未认证用户 
    kube-node-lease kubernetes集群节点租约状态,v1.13加入 
    kube-system kubernetes集群在使用
    
    • 1
    • 2
    • 3
    • 4

    1.2 创建命名空间

    [root@k8s-master ~]# kubectl create namespace dream21th-one
    namespace/dream21th-one created
    [root@k8s-master ~]# kubectl create ns dream21th-two
    namespace/dream21th-two created
    [root@k8s-master ~]# kubectl get ns
    NAME              STATUS   AGE
    default           Active   118d
    dream21th-one     Active   49s
    dream21th-two     Active   30s
    kube-node-lease   Active   118d
    kube-public       Active   118d
    kube-system       Active   118d
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    1.3 删除命名空间

    [root@k8s-master ~]# kubectl delete namespace dream21th-one
    namespace "dream21th-one" deleted
    [root@k8s-master ~]# kubectl delete ns dream21th-two
    namespace "dream21th-two" deleted
    [root@k8s-master ~]# kubectl get ns
    NAME              STATUS   AGE
    default           Active   118d
    kube-node-lease   Active   118d
    kube-public       Active   118d
    kube-system       Active   118d
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2 pod简介

    ​ Pod是kubernetes集群能够调度的最小单元。Pod是容器的封装 。 在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被同

    一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。

    网络:每一个Pod都会被指派一个唯一的Ip地址,在Pod中的每一个容器共享网络命名空间,包括Ip地址和网络端口。在同一个Pod中的容器可以和localhost进行互相通信。当Pod中的容器需要与Pod外的实体进行通信时,则需要通过端口等共享的网络资源。

    存储:Pod能够被指定共享存储卷的集合,在Pod中所有的容器能够访问共享存储卷,允许这些容器共享数据。存储卷也允许在一个Pod持久化数据,以防止其中的容器需要被重启。

    ​ K8s一般不直接创建Pod。 而是通过控制器和模版配置来管理和调度在Pod中的容器可能会由于异常等原因导致其终止退出,kubernetes提供了重启策略以重启容器。重启策略对同一个Pod的所有容器起作用,容器的重启由Node上的kubelet执行。Pod支持三种重启策略,在配置文件中通过restartPolicy字段设置重启策略(注意,这里的重启是指在Pod的宿主Node上进行本地重启,而不是调度到其它Node上):

    ​ 1,Always:只要退出就会重启;

    ​ 2,OnFailure:只有在失败退出(exit code不等于0)时,才会重启;

    ​ 3,Never:只要退出,就不再重启。

    ​ Kubernetes通过cgroups限制容器的CPU和内存等计算资源,包括requests(请求,调度器保证调度到资源充足的Node上)和limits(上限)等。

    2.1 查看pod

    #查看default命名空间下的pods
    [root@k8s-master ~]# kubectl get pods
    No resources found in default namespace.
    #查看kube-system命名空间下的pods
    [root@k8s-master ~]# kubectl get pods -n kube-system
    #查看所有命名空间下的pods
    [root@k8s-master ~]# kubectl get pod --all-namespaces
    [root@k8s-master ~]# kubectl get pod -A
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.2 创建pod

    ​ 下载镜像:

    [root@k8s-master ~]# docker pull tomcat:9.0.20-jre8-alpine
    
    • 1

    ​ 运行pod:

    #在default命名空间中创建一个pod副本的deployment
    [root@k8s-master ~]# kubectl run tomcat9-test --image=tomcat:9.0.20-jre8-alpine --port=8080
    kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
    deployment.apps/tomcat9-test created
    [root@k8s-master ~]# kubectl get pod
    NAME                            READY   STATUS    RESTARTS   AGE
    tomcat9-test-569b5bf455-9bvzs   1/1     Running   0          14s
    [root@k8s-master ~]# kubectl get pod -o wide
    NAME                            READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
    tomcat9-test-569b5bf455-9bvzs   1/1     Running   0          22s   10.244.2.3   k8s-work2   <none>           <none>
    #使用pod的IP访问容器
    [root@k8s-master ~]# curl 10.244.2.3:8080
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.3 扩容

    # 扩容成3个
    [root@k8s-master ~]# kubectl scale --replicas=3 deployment/tomcat9-test
    deployment.apps/tomcat9-test scaled
    # 查看pod
    [root@k8s-master ~]# kubectl get pod
    NAME                            READY   STATUS              RESTARTS   AGE
    tomcat9-test-569b5bf455-9bvzs   1/1     Running             0          4m17s
    tomcat9-test-569b5bf455-s826c   0/1     ContainerCreating   0          5s
    tomcat9-test-569b5bf455-zx4zk   0/1     ContainerCreating   0          5s
    [root@k8s-master ~]# kubectl get pod -o wide
    NAME                            READY   STATUS    RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES
    tomcat9-test-569b5bf455-9bvzs   1/1     Running   0          4m22s   10.244.2.3   k8s-work2   <none>           <none>
    tomcat9-test-569b5bf455-s826c   1/1     Running   0          10s     10.244.1.5   k8s-work1   <none>           <none>
    tomcat9-test-569b5bf455-zx4zk   1/1     Running   0          10s     10.244.1.4   k8s-work1   <none>           <none>
    #查看部署
    [root@k8s-master ~]# kubectl get deployment
    NAME           READY   UP-TO-DATE   AVAILABLE   AGE
    tomcat9-test   3/3     3            3           4m40s
    [root@k8s-master ~]# kubectl get deployment -o wide
    NAME           READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS     IMAGES                      SELECTOR
    tomcat9-test   3/3     3            3           4m52s   tomcat9-test   tomcat:9.0.20-jre8-alpine   run=tomcat9-test
    [root@k8s-master ~]# curl 10.244.2.3:8080
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2.4 创建服务

    [root@k8s-master ~]# kubectl expose deployment tomcat9-test --name=tomcat9-svc --port=8888 --target-port=8080 --protocol=TCP --type=NodePort
    service/tomcat9-svc exposed
    [root@k8s-master ~]# kubtck get pod
    -bash: kubtck: 未找到命令
    [root@k8s-master ~]# kubtck get pods
    -bash: kubtck: 未找到命令
    [root@k8s-master ~]# kubectl get pods
    NAME                            READY   STATUS    RESTARTS   AGE
    tomcat9-test-569b5bf455-9bvzs   1/1     Running   0          16m
    tomcat9-test-569b5bf455-s826c   1/1     Running   0          12m
    tomcat9-test-569b5bf455-zx4zk   1/1     Running   0          12m
    [root@k8s-master ~]# kubtck get svc
    -bash: kubtck: 未找到命令
    [root@k8s-master ~]# kubectl get svc
    NAME          TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
    kubernetes    ClusterIP   10.96.0.1     <none>        443/TCP          118d
    tomcat9-svc   NodePort    10.96.33.14   <none>        8888:30286/TCP   40s
    [root@k8s-master ~]# curl 10.96.33.14:8888
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    ​ 在浏览器上面访问http://192.168.43.103:30286/也可以正常访问。

    3 常用指令

    3.1 get

    ​ kubectl get:列出一个或多个资源。

    #查看集群状态信息
    [root@k8s-master ~]# kubectl cluster-info
    [root@k8s-master ~]# kubectl get cs
    NAME                 STATUS    MESSAGE             ERROR
    controller-manager   Healthy   ok                  
    scheduler            Healthy   ok                  
    etcd-0               Healthy   {"health":"true"}  
    #查看集群节点信息
    [root@k8s-master ~]# kubectl get nodes
    NAME         STATUS   ROLES    AGE    VERSION
    k8s-master   Ready    master   118d   v1.17.5
    k8s-work1    Ready    <none>   118d   v1.17.5
    k8s-work2    Ready    <none>   118d   v1.17.5
    # 查看集群命名空间
    [root@k8s-master ~]# kubectl get ns
    # 查看指定命名空间的服务
    [root@k8s-master ~]# kubectl get svc -n kube-system
    # 以纯文本输出格式列出所有 pod。
    [root@k8s-master ~]# kubectl get pods
    # 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。
    [root@k8s-master ~]# kubectl get pods -o wide
    # 以纯文本输出格式列出所有副本控制器和服务。
    [root@k8s-master ~]# kubectl get rc,services
    #列出在节点 server01 上运行的所有 pod
    [root@k8s-master ~]# kubectl get pods --field-selector=spec.nodeName=k9s-master
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    3.2 describe

    ​ kubectl describe - 显示一个或多个资源的详细状态,默认情况下包括未初始化的资源。

    [root@k8s-master ~]# kubectl describe nodes k8s-master
    [root@k8s-master ~]# kubectl describe pods tomcat9-test-569b5bf455-9bvzs
    
    • 1
    • 2

    3.3 delete

    ​ kubectl delete` - 从文件、stdin 或指定标签选择器、名称、资源选择器或资源中删除资源。

    # 使用 pod.yaml 文件中指定的类型和名称删除 pod。 
    kubectl delete -f pod.yaml 
    # 删除标签名= <label-name> 的所有 pod 和服务。 
    kubectl delete pods,services -l name=<label-name> 
    # 删除所有具有标签名称= <label-name> 的 pod 和服务,包括未初始化的那些。 
    kubectl delete pods,services -l name=<label-name> --include-uninitialized 
    # 删除所有 pod,包括未初始化的 pod。 
    kubectl delete pods --all
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.4 进入容器

    ​ kubectl exec - 对 pod 中的容器执行命令。与docker的exec命令非常类似。

    # 从 pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。 
    kubectl exec <pod-name> date
    # 运行输出 'date' 获取在容器的 <container-name> 中 pod <pod-name> 的输出。
    kubectl exec <pod-name> -c <container-name> date 
    # 获取一个交互 TTY 并运行 /bin/bash <pod-name >。默认情况下,输出来自第一个容器。 
    kubectl exec -ti <pod-name> /bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.5 logs

    ​ kubectl logs - 打印 Pod 中容器的日志。

    # 从 pod 返回日志快照。 
    kubectl logs <pod-name> 
    # 从 pod <pod-name> 开始流式传输日志。这类似于 'tail -f' Linux 命令。 
    kubectl logs -f <pod-name>
    
    • 1
    • 2
    • 3
    • 4

    3.6 格式化输出

    [root@k8s-master ~]# kubectl get pod tomcat9-test-569b5bf455-9bvzs -o yaml
    
    • 1

    3.7 强制删除pod

    强制删除一个pod 
    --force --grace-period=0
    
    • 1
    • 2

    4 资源缩写

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X0Kd3RqD-1656583866075)(D:\developsoftware\mayun\note\study-note\docker\images\image-20220630175627753.png)]

  • 相关阅读:
    java桌面程序
    10个优秀的Python库,实用且有趣
    C++入门(2):缺省参数、函数重载、引用
    FreeRTOS 计数型信号量 详解
    【算法-哈希表2】快乐数 和 两数之和
    红队技术笔记
    Kubernetes 的亲和性污点与容忍
    论文精读--Learning Efficient Object Detection Models with Knowledge Distillation
    Docker详解(上)
    MySQL 索引类型和存储引擎详解
  • 原文地址:https://blog.csdn.net/qq_36305027/article/details/125545883