首页 > 其他分享 >Kubernetes资源管理方式和Namespace、pod、label、deployment、service资源介绍

Kubernetes资源管理方式和Namespace、pod、label、deployment、service资源介绍

时间:2022-10-07 16:22:35浏览次数:48  
标签:kubectl Kubernetes Namespace label nginx node1 pod root Pod

  • kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。

  • kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在Pod中,而kubernetes一般也不会直接管理Pod,而是通过Pod控制器来管理Pod的。

  • Pod可以提供服务之后,就要考虑如何访问Pod中服务,kubernetes提供了Service资源实现这个功能。

  • 如果Pod中程序的数据需要持久化,kubernetes还提供了各种存储系统。

  • 学习kubernetes的核心,就是学习如何对集群上的Pod、Pod控制器、Service、存储等各种资源进行操作。
  • 资源类型

    kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看kubectl api-resources

  • kubectl api-resources

  • 资源分类资源名称缩写资源作用
    集群级别资源 nodes no 集群组成部分
    namespaces ns 隔离Pod  
    pod资源 pods po 装载容器
    pod资源控制器 replicationcontrollers rc 控制pod资源
      replicasets rs 控制pod资源
      deployments deploy 控制pod资源
      daemonsets ds 控制pod资源
      jobs   控制pod资源
      cronjobs cj 控制pod资源
      horizontalpodautoscalers hpa 控制pod资源
      statefulsets sts 控制pod资源
    服务发现资源 services svc 统一pod对外接口
      ingress ing 统一pod对外接口
    存储资源 volumeattachments 存储  
      persistentvolumes pv 存储
      persistentvolumeclaims pvc 存储
    配置资源 configmaps cm 配置
      secrets   配置
  •  练习指令式命令 创建/删除 namespace和pod

  • [root@node2 ~]# kubectl create namespace test
    namespace/test created
    [root@node2 ~]# kubectl get ns
    NAME STATUS AGE
    default Active 39h
    kube-node-lease Active 39h
    kube-public Active 39h
    kube-system Active 39h
    kuboard Active 38h
    nginx-ingress Active 38h
    test Active 6s

  • 运行一个pod
  • [root@node1 ~]# kubectl run pod --image=nginx -n test
    pod/pod created

  • 查看pod日志
  • [root@node1 ~]# kubectl logs -f pod -n test
    /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
    /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
    /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
    10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
    10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
    /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
    /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
    /docker-entrypoint.sh: Configuration complete; ready for start up
    2022/10/07 06:53:50 [notice] 1#1: using the "epoll" event method
    2022/10/07 06:53:50 [notice] 1#1: nginx/1.23.1
    2022/10/07 06:53:50 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
    2022/10/07 06:53:50 [notice] 1#1: OS: Linux 3.10.0-1160.53.1.el7.x86_64
    2022/10/07 06:53:50 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
    2022/10/07 06:53:50 [notice] 1#1: start worker processes
    2022/10/07 06:53:50 [notice] 1#1: start worker process 30
    2022/10/07 06:53:50 [notice] 1#1: start worker process 31

  • 查看新建的pod
  • [root@node1 ~]# kubectl get pods -n test
    NAME READY STATUS RESTARTS AGE
    pod 1/1 Running 0 4m43s

  • 删除pod
  • [root@node1 ~]# kubectl delete pod -n test
    error: resource(s) were provided, but no name, label selector, or --all flag specified
    [root@node1 ~]# kubectl delete pods pod -n test
    pod "pod" deleted
    [root@node1 ~]# kubectl get pods -n test
    No resources found in test namespace.

  • Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。

    默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。

  • 访问pod
  • [root@node1 ~]# kubectl get pod -n test -o wide
    NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
    nginx 0/1 ImagePullBackOff 0 6m16s 10.100.166.131 node1 <none> <none>
    pod 1/1 Running 0 94s 10.100.104.2 node2 <none> <none>
    [root@node1 ~]# curl http://10.100.104.2
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    body {
    width: 35em;
    margin: 0 auto;
    font-family: Tahoma, Verdana, Arial, sans-serif;
    }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>

    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>

    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>

  • 虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:

    Pod IP 会随着Pod的重建产生变化
    Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问
    这样对于访问这个服务带来了难度。因此,kubernetes设计了Service来解决这个问题。

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

     创建deployment ,通过yaml文件创建控制器

  • [root@node1 ~]# kubectl apply -f nginx-deployment.yaml
    deployment.apps/nginx-deployment created

  • [root@node1 ~]# kubectl get deployment -n dev
    NAME READY UP-TO-DATE AVAILABLE AGE
    nginx-deployment 1/1 1 1 85s

  • 创建 service
  • [root@node1 ~]# kubectl get deployment -n dev
    NAME READY UP-TO-DATE AVAILABLE AGE
    nginx-deployment 1/1 1 1 4m43s
    [root@node1 ~]# kubectl expose deployment nginx-deployment -n dev --type=ClusterIP --port=80 --target-port=80
    service/nginx-deployment exposed

  • [root@node1 ~]# kubectl get svc -n dev
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    nginx-deployment ClusterIP 10.96.234.210 <none> 80/TCP 91s
    [root@node1 ~]# curl http://10.96.234.210
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    body {
    width: 35em;
    margin: 0 auto;
    font-family: Tahoma, Verdana, Arial, sans-serif;
    }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>

    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>

    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    [root@node1 ~]#

标签:kubectl,Kubernetes,Namespace,label,nginx,node1,pod,root,Pod
From: https://www.cnblogs.com/vzhangxk/p/16759799.html

相关文章

  • Kubernetes--LoadBalancer类型的Service资源和ExternalName Service
    LoadBalancer类型的Service资源NodePort类型的Service资源虽然能够于集群外部访问得到,但外部客户端必须得事先得知NodePort和集群中至少一个节点的IP地址,且选定的节点发......
  • kubernetes 网络组件cilium
    1.12配置Linux内核(cilium必选)cilium和其他的cni组件最大的不同在于其底层使用了ebpf技术,而该技术对于Linux的系统内核版本有较高的要求,完成的要求可以查看官网的详细链接,这......
  • 【 云原生 | kubernetes 】- tekton构建CI/CD流水线(一)
    ​ Tekton是用于构建CI/CD管道的云原生解决方案。它由提供构建块的TektonPipelines和支持组件(例如TektonCLI和TektonCatalog)组成,它们使Tekton成为一个完整的生......
  • Kubernetes--NodePort类型的Service资源
    NodePort类型的Service资源NodePort即节点Port,通常在安装部署Kubernetes集群系统时会预留一个端口范围用于NodePort,默认为30000~32767之间的端口。与ClusterIP类型的可省......
  • KUBERNETES服务健康检查配置最佳实践
    ​简介K8S服务健康检查从两个维度进行,分别为:就绪状态检查(readiness)和存活状态检查(liveness)。存活探针和就绪探针被称作健康检查。这些容器探针是一些周期性运行的小进程......
  • Kubernetes--服务暴露 Service类型
      Service的IP地址仅在集群内可达,然而,总会有些服务需要暴露到外部网络中接受各类服务端的访问,例如分层架构应用中的前端Web应用程序等。此时,就需要在集群的边缘为其添......
  • Kubernetes--服务发现方式
    服务发现方式:环境变量创建Pod资源时,kubelet会将其所属名称空间内的每个活动的Service对象以一系列环境变量的形式注入其中。它会支持使用KubernetesService环境变量以及......
  • labelme:图像数据标注
    labelme:图像数据标注导读深度学习第一步就是制作数据集,手动去标注一些数据。本文将介绍一个用于图像数据标注的软件:labelme,并介绍它的安装方法,使用方法等。1.labelmel......
  • Kubernetes入门
     目录持续更新...​​Kubernetes架构介绍​​​​Kubernetes集群环境准备​​​​Docker安装​​​​CA证书制作​​​​ETCD集群部署​​​​Master节点部署​​​​Node......
  • Kubernetes--服务发现
    服务发现概述简单来说,服务发现就是服务或者应用之间互相定位的过程。不过,服务发现并非新概念,传统的单体应用架构也会用到,只不过单体应用的动态性不强,更新和重新发布的频......