K8S管理核心资源的三种基本方法

简介: K8S管理核心资源的三种基本方法

1 方法分类

  1. 陈述式--主要依赖命令行工具kubectl进行管理
  • 优点
    可以满足90%以上的使用场景
    对资源的增、删、查操作比较容易
  • 缺点
    命令冗长,复杂,难以记忆
    特定场景下,无法实现管理需求
    对资源的修改麻烦,需要patch来使用json串更改。
  1. 声明式-主要依赖统一资源配置清单进行管理
  2. GUI式-主要依赖图形化操作界面进行管理

2 kubectl命令行工具

kubectl中文命令说明

2.0 增加kubectl自动补全

二进制安装的k8s,kubectl工具没有自动补全功能(其他方式安装的未验证),可以使用以下方式开启命令自动补全

source <(kubectl completion bash)

2.1 get 查

2.1.1 查看名称空间namespace

~]# kubectl get namespaces

NAME              STATUS   AGE

default           Active   4d11h

kube-node-lease   Active   4d11h

kube-public       Active   4d11h

kube-system       Active   4d11h

# namespaces可以简写为ns

kubectl get ns

# 但不是所有资源都可以简写,所以我还是习惯tab补全名

2.1.2 查看namespace中的资源

get all查询所有资源

kubectl get all

# 默认是查询default名称空间的资源,查询其他名称空间,需要加 -n namespaces

kubectl get all -n kube-public

一般要养成习惯,get任何资源的时候,都要加上-n参数指定名称空间

get pods查询所有pod

podsecuritypolicies.extensions  

~]# kubectl get pods -n default

NAME             READY   STATUS    RESTARTS   AGE

nginx-ds-p66qh   1/1     Running   0          2d10h

get nodes查询所有node节点

~]# kubectl get nodes -n default

NAME                STATUS     ROLES         AGE     VERSION

hdss7-21.host.com   Ready      master,node   2d12h   v1.15.5

hdss7-22.host.com   NotReady   <none>        2d12h   v1.15.5

2.1.3 -o yaml查看资源配置清单详细信息

-o yaml 可以查看yaml格式的资源配置清单详情

# 查看POD的清单

~]# kubectl -n kube-public get pod nginx-dp-568f8dc55-jk6nb  -o yaml

# 查看deploy的清单

~]# kubectl -n kube-public get deploy nginx-dp -o yaml

# 查看service的清单

~]# kubectl -n kube-public get service -o yaml -n kube-public

2.2 创建删除名称空间

create namespace创建名称空间

~]# kubectl create namespace app

namespace/app created

~]# kubectl get namespaces

NAME              STATUS   AGE

app               Active   16s

default           Active   4d11h

kube-node-lease   Active   4d11h

kube-public       Active   4d11h

kube-system       Active   4d11h

delete namespaces删除名称空间

~]# kubectl delete namespaces app

namespace "app" deleted

~]# kubectl get namespaces

NAME              STATUS   AGE

default           Active   4d11h

kube-node-lease   Active   4d11h

kube-public       Active   4d11h

kube-system       Active   4d11h

2.3 管理POD控制器和POD

deployment类型的POD控制为例,关于POD控制器类型,请参考官网

创建POD控制器

kubectl create deployment nginx-dp --image=harbor.zq.com/public/nginx:v1.17.9 -n kube-public

~]# kubectl get deployments -n kube-public

NAME       READY   UP-TO-DATE   AVAILABLE   AGE

nginx-dp   1/1     1            1           18s

~]# kubectl get pod  -n kube-public

NAME                       READY   STATUS    RESTARTS   AGE

nginx-dp-568f8dc55-9qt4j   1/1     Running   0          7m50s

-o wide查看扩展信息

# 查看POD控制器信息,比基础信息多出了镜像来源,选择器等

kubectl get deployments -o wide -n kube-public

# 查看POD信息,比基础信息多出了POD的IP地址,节点位置等,

kubectl get pod -o wide -n kube-public

describe查看资源详细信息

# 查看POD控制器详细信息

kubectl describe deployments nginx-dp -n kube-public

# 查看POD详细信息

kubectl describe pod nginx-dp-568f8dc55-9qt4j -n kube-public

exec进入某个POD

kubectl -n kube-public exec -it  nginx-dp-568f8dc55-9qt4j bash

用法与docker exec类似

scale 扩容POD

kubectl -n kube-public scale deployments nginx-dp --replicas=2

delete删除POD和POD控制器

~]# kubectl -n kube-public delete pods nginx-dp-568f8dc55-9qt4j

pod "nginx-dp-568f8dc55-9qt4j" deleted

~]# kubectl -n kube-public get pods

NAME                       READY   STATUS    RESTARTS   AGE

nginx-dp-568f8dc55-hnrxr   1/1     Running   0          13s

~]# kubectl -n kube-public delete deployments nginx-dp

deployment.extensions "nginx-dp" deleted

~]# kubectl -n kube-public get pods

No resources found.

在POD控制器存在的情况下,删除了POD,会由POD控制器再创建出新的POD

删除POD控制器后,对应的POD也会一并删除

2.4 service资源管理

从上面的POD删除重建的过程可知,虽然POD会被POD控制器拉起,但是存放的NODE或POD的IP都是不确定的,那怎么对外稳定的提供服务呢

这就需要引入service的功能了,它相当于一个反向代理,不管后端POD怎么变化,server提供的服务都不会变化,可以为pod资源提供稳定的接入点

2.4.1 创建service资源

~]# kubectl -n kube-public create deployment nginx-dp --image=harbor.zq.com/public/nginx:v1.17.9

deployment.apps/nginx-dp created

~]# kubectl -n kube-public expose deployment nginx-dp --port=80

service/nginx-dp exposed

~]# kubectl -n kube-public get service

NAME       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE

nginx-dp   ClusterIP   192.168.94.73   <none>        80/TCP    45s

可以看到创建了一个VIP192.168.94.73,查看LVS信息,可以看到转发条目

[root@hdss7-21 ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

......    

TCP  192.168.94.73:80 nq

 -> 172.7.21.3:80                Masq    1      0          0

2.4.2 扩容POD看service怎么调度

~]# kubectl -n kube-public scale deployment nginx-dp --replicas=2

deployment.extensions/nginx-dp scaled

~]# ipvsadm -Ln

......

TCP  192.168.94.73:80 nq

 -> 172.7.21.3:80                Masq    1      0          0        

 -> 172.7.22.4:80                Masq    1      0          0

2.5 explain查看属性的定义和用法

查看service资源下metadata的定义及用法

kubectl explain service.metadata

3 统一资源配置清单

统一资源配置清单,就是一个yaml格式的文件,文件中按指定格式定义了所需内容,然后通过命令行工具kubectl应用即可

3.1 语法格式

kubectl create/apply/delete -f /path_to/xxx.yaml

3.1.1 学习方法

  1. 忌一来就无中生有自己写,容易把自己憋死
  2. 先看官方或别人写的,能读懂即可
  3. 别人的读懂了能改改内容即可
  4. 遇到不懂的用kubectl explain查帮助

3.2 初略用法

3.2.1 查看已有资源的资源配置清单

kubuctl get svc nginx-dp -o yaml -n kube-pubic

必须存在的四个部分为:

apiVersion

kind

metadata

spec

资源配置清单中有许多项目,如果想查看资源配置清单中某一项的意义或该项下面可以配置的内容,可以使用explain来获取

kubectl explain service.kind

3.2.2 创建并应用资源配置清单

创建yaml配置文件

cat >nginx-ds-svc.yaml <<EOF

apiVersion: v1

kind: Service

metadata:

 labels:

   app: nginx-ds

 name: nginx-ds

 namespace: default

spec:

 ports:

 - port: 80

   protocol: TCP

   targetPort: 80

 selector:

   app: nginx-ds

 type: ClusterIP

EOF

应用配置创建资源

kubectl create -f nginx-ds-svc.yaml

# 或

kubectl apply -f nginx-ds-svc.yaml

# 查看结果

[root@hdss7-21 ~]# kubectl  get -f nginx-ds-svc.yaml

NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE

nginx-ds   ClusterIP   192.168.48.225   <none>        80/TCP    24s

create和apply的区别

create命令和apply命令都会根据配置文件创建资源,但是:

  1. create命令只会新建,如果资源文件已使用过,则会提示错误
  2. 如果资源不存在,apply命令会新建,如果已存在,则会根据配置修改
  3. 如果是create命令新建的资源,使用apply修改时会提示

[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml

Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply

  1. 意思是如果要用apply修改,就应该用apply命令创建,或者create创建时加--save-config参数
  2. 所以养成使用apply命令的习惯即可

3.2.3 修改资源配置清单

在线修改

使用edit命令,会打开一个在线的yaml格式文档,直接修改该文档后,修改立即生效

kubectl edit svc nginx-ds -n default

# 查看结果

[root@hdss7-21 ~]# kubectl get service nginx-ds

NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE

nginx-ds   ClusterIP   192.168.48.225   <none>        8080/TCP   2m37s

离线修改

离线修改就是修改原来的yaml文件,然后使用apply命令重新应用配置即可

#将对外暴露的端口改为881

sed -i 's#port: 80#port: 881#g' nginx-ds-svc.yaml

# edit修改过资源,再用apply修改,会报错

[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml

The Service "nginx-ds" is invalid:

* spec.ports[0].name: Required value

* spec.ports[1].name: Required value

# 加上--force强制修改选项

[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml --force

service/nginx-ds configured

# 查看结果

[root@hdss7-21 ~]# kubectl get service nginx-ds

NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE

nginx-ds   ClusterIP   192.168.142.98   <none>        881/TCP   8s

3.2.4 删除资源配置清单

陈述式删除

即:直接删除创建好的资源

kubectl delete svc nginx-ds -n default

声明式删除

即:通过制定配置文件的方式,删除用该配置文件创建出的资源

kubectl delete -f nginx-ds-svc.yaml

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
8天前
|
存储 Java 数据库
平台设计-数据相关类
平台上和数据有关的类有实体类BO、视图类VO、传输类DTO;传输类又细分为信息类和请求类。
|
3月前
|
监控 项目管理
问题管理的方法
问题管理的方法
问题管理的方法
|
7月前
|
存储 消息中间件 Java
设计与思考,关于资源和生命周期
在工作中,经常会看到或者用到池化技术,例如数据库连接池、线程池、内存池等等。这类池化技术在很多经典框架中都存在,并且是设计中的重要部分。
127 0
|
Scala 开发者
控制抽象的最佳实践 | 学习笔记
快速学习控制抽象的最佳实践
67 0
|
传感器 存储 SQL
应用编排与管理:核心原理|学习笔记
快速学习应用编排与管理:核心原理
85 0
应用编排与管理:核心原理|学习笔记
Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(二)
③. 线程池的底层工作原理? ④. 线程池用过吗?生产上你是如何设置合理参数 ①. 线程池的拒绝策略请你谈谈 ②. 你在工作中单一的/固定数的/可变你的三种创建线程池的方法,你用哪个多?超级大坑
141 0
Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(二)
|
缓存 Java
Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(一)
①. ThreadPoolExecutor谈谈你的理解? ②. 线程池的七大参数
152 0
Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(一)
Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(三)
③. 你在工作中是如何创建线程池的,是否自定义过线程池使用 ④. 合理配置线程池你是如何考虑的?
114 0
Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(三)
|
云计算 人工智能 数据处理
对话行癫:解密阿里云顶层设计和底层逻辑
几十个问题,万字长文,阿里云新任总裁行癫履新后首次深入讨论阿里云对云计算未来的判断,深度解读未来阿里云生态战略,揭秘阿里技术委员会和阿里中台思想的原生思考。
2294 0