K8S快速入门-2资源管理介绍实战入门

k8s快速入门-2资源管理介绍实战入门

1. 资源管理介绍

image-20230124232906673 image-20230124233206597

2. yaml语言介绍

类似XML、json的标记型语言,基本不用学习,大概了解就行了

有yaml和json的转换网站

3. 资源管理方式介绍

image-20230125005446800

有各自的适用场景,还需要结合自己的项目来说

3.1 命令式对象管理

3.1.1 kubectl命令

很多命令实际上使用的时候就知道了,或者使用的时候学会查阅文档就行了,重要的是怎么配合项目给使用上

以一个namespace / pod的创建和删除简单演示一些命令的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 创建一个namespace
root@h9:~# kubectl create namespace dev
namespace/dev created

# 获取namespace
root@h9:~# kubectl get ns
NAME STATUS AGE
default Active 163m
dev Active 41s
kube-flannel Active 143m
kube-node-lease Active 163m
kube-public Active 163m
kube-system Active 163m

# 在此namespace下创建并运行一个nginx的pod
root@h9:~# kubectl run pod --image=nginx -n dev
pod/pod created

# 查看新创建的pod
root@h9:~# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pod 1/1 Running 0 45s

# 删除指定的pod
root@h9:~# kubectl delete pod pod -n dev
pod "pod" deleted

# 删除dev这个namespace
root@h9:~# kubectl delete ns dev

3.2 命令式对象配置

1)创建一个nginxpod.yaml文件,内容如下:

image-20230125011555110

2)执行create命令,创建资源:

image-20230125011616450

此时发现创建了两个资源对象,分别是namespace和pod。这里是一个简单的演示

这里也可以执行kubectl delete -f xxx.yaml进行整体的删除

3)执行get命令查看资源

image-20230125011952002

这样就显示了两个对象的信息

3.3 声明式对象配置

image-20230125013752976

3.4 扩展

image-20230125013948982 image-20230125014053322

4. 实战入门(主要感觉是deployment和service的结合)

本章节将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问

image-20230125014925396

4.1 Namespace(类似一种组管理,边界)

image-20230125014225930 image-20230125100938048

kubernetes启动后,会默认创建几个namespace

1
2
3
4
5
6
7
root@h9:~# kubectl get ns
NAME STATUS AGE
default Active 12h # 所有未指定Namespace对象都会被分配在这个命名空间
kube-flannel Active 11h
kube-node-lease Active 12h # 集群之间的心跳维护
kube-public Active 12h # 此命名空间下的资源可以被所有人访问(包括未认证用户)
kube-system Active 12h # 所有由k8s系统创建的资源都处于这个命名空间

下面来看namespace资源的具体操作

查看

1
2
3
4
5
6
7
# 1 查看所有的ns,命令:kubectl get ns

# 2 查看指定的ns 命令:kubectl get ns ns名称

# 3 指定输出格式 命令:kubetl get ns ns名称 -o 格式参数[JSON YAML]

# 4 查看ns详情 命令:kubectl describe ns ns名称

创建

1
# 创建namespace kubectl create ns dev

删除

1
# 删除namespace kubectl delete ns dev

配置方式

首先准备一个yaml文件:ns-dev.yaml

1
2
3
4
apiVersion: v1
kind: Namespace
metadata:
name: dev

创建:kubectl create -f ns-dev.yaml

删除:kubectl delete -f ns-dev.yaml

4.2 Pod

Pod是kubernetes集群进行管理的最小单元,程序必须运行在容器中,而容器必须存在于pod中

pod可以认为是容器的封装,一个pod中可以存在一个或者多个容器

image-20230125110106944

查看

kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。可以通过下面命令查看:

1
2
3
4
5
6
7
8
9
10
root@h9:~# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-7f6cbbb7b8-9bsqc 1/1 Running 0 12h
coredns-7f6cbbb7b8-lqzcs 1/1 Running 0 12h
etcd-h9 1/1 Running 1 12h
kube-apiserver-h9 1/1 Running 1 12h
kube-controller-manager-h9 1/1 Running 1 12h
kube-proxy-b8j7l 1/1 Running 0 12h
kube-proxy-zqbpb 1/1 Running 1 12h
kube-scheduler-h9 1/1 Running 1 12h

创建并运行

kubernetes没有提供单独运行pod的命令,都是通过pod控制器实现

1
2
3
4
5
6
# 命令格式:kubectl run (pod控制器名称,下面的nginx) [参数]
# --image 指定pod的镜像
# --port 指定端口
# --namespace 指定namespace,要先创建这个命名空间
例如:
kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace dev

查看pod信息

1
2
3
4
5
# 查看pod基本信息
kubectl get pods -n dev

# 查看pod的详细信息
kubectl describe pod nginx-5fffxxxxx -n dev -o wide
image-20230125113220589

访问pod

1
2
3
4
5
# 获取podIP
kubectl get pods -n dev -o wide

# 访问POD
curl http://10.224.1.23:80
image-20230125113618224

删除指定的pod

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 删除指定pod
kubectl delete pod nginx-xxxx -n dev

# 此时显示删除pod成功,但是再查询,发现又新厂生了一个
kubectl get pods -n dev

# 这是因为当前pod是由pod控制器创建的,监控器会监控pod状态,一旦死亡,会立即重建
# 此时想要删除pod,必须删除pod控制器

# 先来查询一下当前namespace下的pod控制器
kubectl get deploy -n dev

# 接下来,删除此pod的pod控制器
kubectl delete deploy nginx(pod控制器名称) -n dev

# 稍等片刻,发现被删除了
kubectl get pods -n dev

配置操作

image-20230125114306148

4.3 Label

image-20230125133108380

常见label:

image-20230125133756188

Label Selector

image-20230125133913177

命令方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 为pod资源打标签
kubectl label pod nginx-pod version=1.0 -n dev

# 为pod资源更新标签
kubectl label pod nginx-pod version=2.0 -n dev --overwrite

# 查看标签
kubectl get pod nginx-pod -n dev --show-labels

# 筛选标签
kubectl get pod -n dev -l version=2.0 --show-labels
kubectl get pod -n dev -l version!=2.0 --show-labels

# 删除标签
kubectl label pod nginx-pod version- -n dev
image-20230125134611448

配置方式

image-20230125134644899

4.4 Deployment

pod控制器

image-20230125134817859 image-20230125134830888

之前的只有删掉控制器,才能真的删掉pod,否则会一直重启

使用kubectl delete ns devkubectl create ns dev,来重新建一个环境

查看可以kubectl get deployment,pods -n dev

命令操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 命令格式:kubectl run deployment名称 [参数]
# --image 指定pod的镜像
# --port 指定端口
# --replicas 指定创建pod数量
# --namespace 指定namespace
kubectl run nginx --image=nginx:1.17.1 --port=80 --replicas=3 -n dev

# 查看创建的pod
kubectl get pods -n dev

# 查看deployment的信息(上层)
kubectl get deploy -n dev

# 删除
kubectl delete deploy nginx -n dev

配置操作

image-20230125140654886

image-20230125224508581

4.5 Service

image-20230125140954233

不expose就不行

image-20230125141615718

4.5.1 操作一:创建集群内部可访问的Service

1
2
3
4
5
# 暴露Service
kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev

# 查看Service
kubectl get svc svc-nginx -n dev -o wide
image-20230125142029034

4.5.2 操作二:创建集群外部也可以访问的Service

image-20230125142114496

4.5.3 删除service

1
kubectl delete svc svc-nginx-1 -n dev

4.5.4 配置方式※重点

image-20230125142336158

K8S快速入门-2资源管理介绍实战入门
http://example.com/2023/01/24/develop/k8s/K8S快速入门-2资源管理介绍实战入门/
作者
Curious;
发布于
2023年1月24日
许可协议