前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s集群客户端工具kubectl

k8s集群客户端工具kubectl

作者头像
兜兜转转
发布2023-03-08 11:48:00
1.3K0
发布2023-03-08 11:48:00
举报
文章被收录于专栏:CodeTimeCodeTime

子命令使用分类

NameSpace(命名空间)

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

查看NameSpace

123

kubectl get namespace#或者kubectl get ns

名字

说明

default

用户创建的pod默认在此命名空间

kube-public

所有用户均可以访问,包括未认证用户

kube-node-lease

集群节点租约状态,v1.13加入

kube-system

kubernetes集群系统内部使用的命名空间

创建NameSpace

通过kubectl命令行创建

1

kubectl create namespace test #创建test命名空间

通过应用资源清单文件创建:

准备资源清单文件01-create-ns.yaml

1234

apiVersion: v1kind: Namespacemetadata: name: test2

应用资源清单文件

1

kubectl apply -f 01-create-ns.yaml

删除NameSpace

通过kubectl命令行删除

1

kubectl delete namespace test #删除test命名空间

通过应用资源清单文件删除(使用和创建同样的资源文件):

1

kubectl delete -f 01-create-ns.yaml

Pod

Pod是容器的封装,也是kubernetes集群能够调度的最小单元。

查看Pod

123456

#查看default命名空间中的Pod,pod和pods效果一样kubectl get podkubectl get pods#查看kube-system命名空间中的Podkubectl get pods --namespace kube-systemkubectl get pod -n kube-system

创建Pod

由于网络原因,建议提前准备好容器镜像。本示例使用nginx:latest容器镜像。 编写用于创建Pod资源清单文件02-create-pod.yaml

1234567891011

apiVersion: v1kind: Podmetadata: name: pod1spec: containers: - name: nginx-pod image: nginx:latest ports: -name: nginxport containerPort: 80

应用用于创建Pod资源清单文件

1

kubectl apply -f 02-create-pod.yaml

访问Pod

12

kubectl get pods -o wide #查看pod更加详细信息curl http://172.16.1.2 #直接访问pod的地址

删除Pod

12

kubectl delete pods pod1 #命令行删除kubectl delete -f 02-create-pod.yaml #使用Pod资源清单文件删除

Controller(控制器)

Controller(控制器),用于在k8s集群中以loop方式监视Pod状态,如果其发现Pod被删除,将会重新拉起一个Pod,以让Pod一直保持在用户期望状态。 常见Pod控制器:

控制器名称

作用

Deployment

声明式更新控制器,用于发布无状态应用

ReplicaSet

副本集控制器,用于对Pod进行副本规模扩大或剪裁

StatefulSet

有状态副本集,用于发布有状态应用

DaemonSet

在k8s集群每一个Node上运行一个副本,用于发布监控或日志收集类等应用

Job

运行一次性作业任务

CronJob

运行周期性作业任务

Deployment控制器

  • 具有上线部署、滚动升级、创建副本、回滚到以前某一版本(成功/ 稳定)等功能
  • Deployment包含ReplicaSet,除非需要自定义升级功能或者根本不需要升级Pod,否则还是建议使用Deployment而不直接使用ReplicaSet

创建Deployment控制器类型应用

命令行创建:

123456

kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=2# 说明:# nginx-app 是deployment控制器类型的应用名称# nginx:latest 是应用运行的Pod中的Container所使用的镜像# IfNotPresent 是Container容器镜像下载策略,如果本地有镜像,使用本地,如果本地没有镜像,下载镜像# --replicas=2 是指应用运行的Pod共计2个副本,这是用户的期望值,Deployment控制器中的ReplicaSet控制器会一直监控此应用运行的Pod副本状态,如果数量达不到用户期望,就会重新拉起一个新的Pod,会让Pod数量一直维持在用户期望值数量

查看控制器:

1234567891011

#查看Deployment控制器类型应用kubectl get deployment.apps#查看ReplicaSet控制器类型kubectl get replicaset#查看Pod状态kubectl get pods#查看Pod状态,显示更宽泛信息kubectl get pods -o wide#访问Podcurl http://172.16.xxx.xxcurl http://172.16.xxx.xx

通过资源清单文件创建,编写用于创建Deployment控制器类型应用资源清单03-creat-deployment-app.yaml

12345678910111213141516171819202122

apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-apps labels: app: nginxspec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginxapp image: nginx:latest imagePullPolicy: IfNotPresent ports: - containerPort: 80

应用创建Deployment控制器类型应用资源清单

12345

kubectl apply -f 03-creat-deployment-app.yaml#查看Deployment控制器类型应用kubectl get deployment.apps#查看ReplicaSet控制器类型应用kubectl get replicaset.apps

删除Deployment控制器类型应用

带有控制器类型的Pod不能随便删除,如果必须删除,请删除控制器类型的应用名称。

1234

#通过kubectl命令行删除kubectl delete deployment.apps nginx-app#通过kubectl应用资源清单文件删除kubectl delete -f 03-creat-deployment-app.yaml

Service

Pod的状态不是人为控制的,Pod IP是在创建时分配的,如果在Pod被误删除,被Controller重新拉起一个新的Pod时,Pod IP地址是变化着的,如果访问必Pod则必须更换IP地址。这样对于大量的Pod运行应用来说,无法对Pod进行控制,因此在k8s集群中引入另一个概念Service

Service不是实体服务,是一条iptablesipvs的转发规则。

通过ServicePod客户端提供访问Pod方法,即客户端访问Pod入口,Service通过Pod标签与Pod进行关联。

Service类型

类型

说明

ClusterIP

默认,分配一个集群内部可以访问的虚拟IP

NodePort

在每个Node上分配一个端口作为外部访问入口

LoadBalancer

工作在特定的Cloud Provider上,例如Google Cloud,AWS,OpenStack

ExternalName

表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信

Service参数

参数

说明

port

访问Service使用的端口

targetPort

Pod中容器端口

NodePort

通过Node实现外网用户访问k8s集群内Service(30000-32767)

Service创建

通过命令行创建:

1234567891011

#创建Deployment类型应用kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=1#创建Service与Deployment类型应用关联kubectl expose deployment.apps nginx-app --type=ClusterIP --target-port=80 --port=80# 说明:# expose 创建service# deployment.apps 控制器类型# nginx-app 应用名称,也是service名称# --type=ClusterIP 指定service类型# --target-port=80 指定Pod中容器端口 # --port=80 指定service端口

访问Service以实现访问Pod目的:

1234

# 查看Service创建情况kubectl get service# 访问Servicecurl http://10.109.21.171

通过资源清单YAML文件创建,编写用于创建ClusterIP类型Service资源清单文件create-deployment-service-clusterip.yaml

123456789101112131415161718192021222324252627282930313233343536

apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-apps labels: app: nginxspec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginxapp image: nginx:latest imagePullPolicy: IfNotPresent ports: - containerPort: 80 --- apiVersion: v1kind: Servicemetadata: name: nginx-appsspec: type: ClusterIP selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80

应用用于创建Service资源清单文件

1

kubectl apply -f create-deployment-service-clusterip.yaml

基于资源清单YAML文件创建NodePort类型Service,create-deployment-service-nodeport.yaml

12345678910111213141516171819202122232425262728293031323334353637

apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-apps labels: app: nginxspec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginxapp image: nginx:latest imagePullPolicy: IfNotPresent ports: - containerPort: 80 --- apiVersion: v1kind: Servicemetadata: name: nginx-appsspec: type: NodePort selector: app: nginx ports: - protocol: TCP nodePort: 30001 port: 80 targetPort: 80

验证资源对象创建情况

1234

#查看service创建kubectl get service#查看k8s集群所有主机30001端口侦听状态ss -anput | grep ":30001"

在k8s集群外访问Service,在物理机浏览器中访问即可验证。

Service删除

1234

#命令行删除kubectl delete service nginx-app#通过资源清单YAML文件删除kubectl delete -f create-deployment-service-clusterip.yaml

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 子命令使用分类
  • NameSpace(命名空间)
    • 查看NameSpace
      • 创建NameSpace
        • 删除NameSpace
        • Pod
          • 查看Pod
            • 创建Pod
              • 访问Pod
                • 删除Pod
                • Controller(控制器)
                  • Deployment控制器
                    • 创建Deployment控制器类型应用
                    • 删除Deployment控制器类型应用
                • Service
                  • Service类型
                    • Service参数
                      • Service创建
                        • Service删除
                        相关产品与服务
                        容器服务
                        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档