Docker&Kubernetes ❀ Kubernetes集群资源的管理与配置
Posted 无糖可乐没有灵魂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker&Kubernetes ❀ Kubernetes集群资源的管理与配置相关的知识,希望对你有一定的参考价值。
文章目录
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
表格整理各项优缺点:
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
常用操作汇总如下:
3.1.2 资源类型
Kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看;
[root@master ~]# kubectl api-resources
常见资源汇总如下:
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 命令;
以上是关于Docker&Kubernetes ❀ Kubernetes集群资源的管理与配置的主要内容,如果未能解决你的问题,请参考以下文章
Docker&Kubernetes ❀ Kubernetes集群安装部署过程与常见的错误解决方法
Docker&Kubernetes ❀ Kubernetes集群安装部署过程与常见的错误解决方法
Docker&Kubernetes ❀ Kubernetes集群实践与部署笔记知识点梳理
Docker&Kubernetes ❀ Docker 容器技术笔记链接梳理