0
点赞
收藏
分享

微信扫一扫

Docker&Kubernetes ❀ Kubernetes集群资源的管理与配置


文章目录

  • ​​1、资源管理介绍​​
  • ​​2、YAML语法介绍​​
  • ​​2.1 纯量​​
  • ​​2.2 对象​​
  • ​​2.3 数组​​
  • ​​2.4 注意事项​​
  • ​​3、资源管理方式​​
  • ​​3.1 命令式对象管理​​
  • ​​3.1.1 执行操作​​
  • ​​3.1.2 资源类型​​
  • ​​3.1.3 实验案例​​
  • ​​3.2 命令式对象配置​​
  • ​​3.3 声明式对象配置​​
  • ​​3.4 业务拓展配置​​

1、资源管理介绍

在Kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理Kubernetes;Kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在Kubernetes集群中运行一个一个的容器,并将指定的程序跑在容器中;
Kubernetes的最小管理单元是Pod而并非容器,所以只能将容器放在Pod中,而Kubernetes一般也并不会直接管理Pod,而是通过Pod控制器来管理Pod;
Pod可以提供服务之后就要考虑如何访问Pod中的服务,Kubernetes提供了Service资源来实现这个功能,当然,Pod中的程序数据需要持久化,Kubernetes还提供了各种存储系统;

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

2、YAML语法介绍

YAML是一个类似XML、JSON的标记性语言,它强调以数据为中心,并不是以标识语言为重点,因而YAML本身的定义就比较简单;

  • 大小写敏感;
  • 使用缩进表示层级关系;
  • 缩进不允许使用tab,只允许空格(旧版本不能,新版本可以);
  • #表示注释;

YAML支持以下几种数据类型:

  • 纯量:单个的、不可拆分的值;
  • 对象:键值对的集合,又称为映射 Mapping / 哈希 Hash / 字典 Dictionary;
  • 数组:一组按次序排列的值,又称为序列 Sequence / 列表 List;

下面是一个可以将JSON与YAML互相转换的网页,可以使用对比方法学习YAML语句标准;
​​​ https://json2yaml.com/​​

2.1 纯量

就是一个简单的值,如:字符串、布尔值、整数、浮点数、Null、时间、日期

# 1 布尔值
c1: true或True / false或False
# 2 整数
c2: 123
# 3 浮点数
c3: 123.456
# 4 null类型(不赋值为空,也可以使用~代替)
c4: ~
# 5 日期类型(使用ISO 8601格式,即yyyy-mm-dd)
c5: 1999-09-09
# 6 时间类型(使用ISO 8601格式,时间与日期之间使用T连接,+代表时区)
c6: 2021-12-13T13:43:00+12:00
# 7 字符串类型(拆分成多行,每一行会被转化为一个空格)
c7: aaa
c8: 'bbb
ccc'

2.2 对象

键值对的使用

# 形式一(推荐使用)
test:
age: 18
address: 10.81.20.170

# 形式二(了解)
test: {age: 18,address: 10.81.20.170}

2.3 数组

一组按次序排列的值

#形式一(推荐使用)
address:
- aaa
- bbb

#形式二(了解)
address: [aaa,bbb]
address: [aaa, bbb] /值与值之间有无空格均可;

2.4 注意事项

  • 书写YAML文件时,: 后面需要加一个空格;
  • 如果需要将多段YAML配置放在一个文件中,需要严格使用 — 分隔;

3、资源管理方式

  • 命令式对象管理:直接使用命令操作Kubernetes资源;
[root@master ~]# kubectl run nginx-pod --image=nginx:1.17.1 --port=80
  • 命令式对象配置:通过命令配置和配置文件操作Kubernetes资源;
[root@master ~]# kubectl create/patch -f nginx-pod.yaml
  • 声明式对象配置:通过apply命令和配置文件操作Kubernetes资源,若不存在Pod则创建,若存在则更新,等同于 创建+更新 合集功能;
[root@master ~]# kubectl apply -f nginx-pod.yaml

表格整理各项优缺点:
Docker&Kubernetes ❀ Kubernetes集群资源的管理与配置_java

3.1 命令式对象管理

kubectl 是Kubernetes集群的管理命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署,kubectl命令语法如下:
​​​kubectl [command] [type] [name] [flags]​

  • command:指定要对资源执行的操作,如create、get、delete等;
  • type:指定资源类型,如pod、service/svc、deployment;
  • name:指定资源的名称,大小写敏感;
  • flags:额外的可选参数;
#查看所有pod
[root@master ~]# kubectl get pod/pods
NAME READY STATUS RESTARTS AGE
nginx-7cbb8cd5d8-7d98v 1/1 Running 0 3h38m

#查看某个pod
[root@master ~]# kubectl get pods nginx-7cbb8cd5d8-7d98v
NAME READY STATUS RESTARTS AGE
nginx-7cbb8cd5d8-7d98v 1/1 Running 0 3h39m

#查看某个pod的详细信息
[root@master ~]# kubectl get pods nginx-7cbb8cd5d8-7d98v -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-7cbb8cd5d8-7d98v 1/1 Running 0 3h39m 10.244.112.2 node1.k8s <none> <none>
#查看某个pod,并以yaml的格式输出
[root@master ~]# kubectl get pods nginx-7cbb8cd5d8-7d98v -o yaml
#查看某个pod,并以json的格式输出
[root@master ~]# kubectl get pods nginx-7cbb8cd5d8-7d98v -o json

3.1.1 执行操作

Kubernetes允许对资源进行多种操作,可以通过帮助命令查看具体内容;
[root@master ~]# kubectl --help

常用操作汇总如下:
Docker&Kubernetes ❀ Kubernetes集群资源的管理与配置_nginx_02

3.1.2 资源类型

Kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看;
[root@master ~]# kubectl api-resources

常见资源汇总如下:
Docker&Kubernetes ❀ Kubernetes集群资源的管理与配置_nginx_03

3.1.3 实验案例

#创建一个命名空间
[root@master ~]# kubectl create ns dev
namespace/dev created
#查看已经创建的命名空间
[root@master ~]# kubectl get ns dev
NAME STATUS AGE
dev Active 8s
#在已经创建的命名空间下创建Pod
[root@master ~]# kubectl run pod --image=nginx -n dev
pod/pod created
#查看已经创建的Pod
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pod 0/1 ContainerCreating 0 13s
#删除创建好的Pod
[root@master ~]# kubectl delete pods pod -n dev
pod "pod" deleted
#删除创建好的命名空间
[root@master ~]# kubectl delete ns dev
namespace "dev" deleted

3.2 命令式对象配置

命令式对象配置就是使用命令配合配置文件一起来操作Kubernetes资源;
常见一个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

执行create命令创建Pod资源

[root@master ~]# kubectl create -f test.yaml 
namespace/dev created
pod/nginxpod created

执行get命令,查看已经创建好的资源

#查看命名空间
[root@master ~]# kubectl get ns dev
NAME STATUS AGE
dev Active 73s
#查看Pod
[root@master ~]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
nginxpod 1/1 Running 0 83s

执行delete命令,删除Pod与命名空间

[root@master ~]# kubectl delete -f test.yaml 
namespace "dev" deleted
pod "nginxpod" deleted

3.3 声明式对象配置

声明式对象配置与命令式对象配置十分相似,仅有一个命令apply;

  • 如果资源不存在,apply = create
  • 如果资源存在,apply=patch
#首次执行apply为创建
[root@master ~]# kubectl apply -f test.yaml
namespace/dev created
pod/nginxpod created
#再次执行apply为更新
[root@master ~]# kubectl apply -f test.yaml
namespace/dev unchanged
pod/nginxpod unchanged

3.4 业务拓展配置

节点node环境上的 kubectl 命令使用是需要进行相关配置的,配置文件为 $HOME/.kube,如果想要在节点node上运行此命令,则需要将master上的.kube文件复制到node节点上,即在master节点上执行如下操作:

[root@master ~]# scp -r HOME/.kube node1:HOME/

复制完成后即可在node节点上使用 kubectl 命令;


举报

相关推荐

0 条评论