资源管理
一、资源管理介绍 在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。 (1)kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个容器,并将指定的程序跑在容器中。 (2)Kubernetes的最小管理单元是pod,而不是容器,所以只能将容器放在pod中,而kubernetes一般也不会直接管理pod,而是通过pod控制器来管理pod。 (3)Pod可以提供服务之后,就要考虑如何访问pod中服务,kubernetes提供了service资源实现这个功能。 (4)如果pod中程序的数据需要持久化,kubernetes还提供了各种存储系统。
学习kubernetes的核心就是学习如何对集群中pod、pod控制器、service、存储等各种资源进行操作。 二、资源管理方式 (1)命令式对象管理:直接使用命令去操作kubernetes资源 kubectl run nginx-pod --image=nginx:1.17.1 --port=80 (2)命令式对象配置:通过命令配置和配置文件去操作kubernetes资源 Kubectl create/path -f nginx-pod.yml (3)声明式对象配置:通过apply和配置文件去操作kubernetes资源 Kubectl apply -f nginx-pod.yml
|---------|------|------|---------|------------------|
| 类型 | 操作对象 | 适用环境 | 优点 | 缺点 |
| 命令式对象管理 | 对象 | 测试 | 简单 | 只能操作活动对象,无法审计、跟踪 |
| 命令式对象配置 | 文件 | 开发 | 可以审计、跟踪 | 项目大时,配置文件多,操作麻烦 |
| 声明式对象配置 | 目录 | 开发 | 支持目录操作 | 意外情况下难以调试 |
1、命令式对象管理 Kubectl命令 Kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。Kubectl命令的语法如下: Kubectl [command] [type] [name] [flags] Command: 指定要对资源执行的操作,比如:create、get、delete Type:指定资源类型,比如deployment、pod、service Name:指定资源的名称,名称大小写敏感 Flags:指定额外的可选参数 //查看所有pod kubectl get pods //查看某个pod kubectl get pod pod_name //查看某个pod,以yaml格式展示结果 kubectl get pod pod_name -o yaml 资源类型: Kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看: kubectl api-resources
经常使用的资源有下面这些:
|------------|--------------------------|--------|-----------|
| 资源分类 | 资源名称 | 缩写 | 资源作用 |
| 集群资源 | nodes | no | 集群组成部分 |
| Namespaces | namespace | ns | 隔离pod |
| Pod资源 | pods | po | 装载容器 |
| Pod资源控制器 | replicationcontrollers | rc | 控制pod资源 |
| | replicasets | rs | 控制pod资源 |
| | deployment | deploy | 控制pod资源 |
| | daemonsets | ds | 控制pod资源 |
| | jobs | | 控制pod资源 |
| | cronjobs | cj | 控制pod资源 |
| | horizontalpodautoscalers | hpa | 控制pod资源 |
| | statefulsets | sts | 控制pod资源 |
| 服务发现资源 | services | svc | 统一pod对外接口 |
| | ingress | ing | 统一pod对外接口 |
| 存储资源 | volumeattachements | | 存储 |
| | persistentvolumes | pv | 存储 |
| | persistentvolumeclaims | pvc | 存储 |
| 配置资源 | configmaps | cm | 配置 |
| | secrets | | 配置 |
操作:
Kubernetes允许对资源进行多种操作,可以通过--help查看详细的操作命令
kubectl --help
经常使用的操作有下面这些:
|------|--------------|----------------|---------------------|
| 命令分类 | 命令 | 翻译 | 命令作用 |
| 基本命令 | create | 创建 | 创建一个资源 |
| | edit | 编辑 | 编辑一个资源 |
| | get | 获取 | 获取一个资源 |
| | patch | 更新 | 更新一个资源 |
| | delete | 删除 | 删除一个资源 |
| | explain | 解释 | 展示资源文档 |
| | run | 运行 | 在集群中运行一个指定的镜像 |
| | expose | 暴露 | 暴露资源为service |
| | describe | 描述 | 显示资源内部信息 |
| | logs | 日志输出容器在pod中的日志 | 输出容器在pod中的日志 |
| | attach | 缠绕进入运行中的容器 | 进入运行中的容器 |
| | exec | 执行容器中的一个命令 | 执行容器中的一个命令 |
| | cp | 复制 | 在pod内外复制文件 |
| | rollout | 首次展示 | 管理资源的发布 |
| | scale | 规模 | 扩(缩)容pod的数量 |
| | autoscale | 自动调整 | 自动调整pod的数量 |
| 高级命令 | apply | Rc | 通过文件对资源进行配置 |
| | label | 标签 | 通过文件对资源进行配置 |
| 其他命令 | cluster-info | 集群信息 | 显示集群信息 |
| | version | 版本 | 显示当前server和client版本 |
//启动脚本
[root@master ~]# bash /etc/modules-load.d/ipvs.modules
//创建命名空间
[root@master ~]# kubectl apply -f a.yaml
namespace/lsy created
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 20h
kube-node-lease Active 20h
kube-public Active 20h
kube-system Active 20h
lsy Active 3s
//创建pod
[root@master ~]# kubectl run nginx --image=nginx --port=80 -n lsy
pod/nginx created
//查看pod
[root@master ~]# kubectl get pods -n lsy
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 18s
//查看新创建的pod
[root@master ~]# kubectl get pods -n lsy
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 2m
//查看详情,并且访问
[root@master ~]# kubectl get pods -n lsy -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 2m7s 172.16.104.5 node2 <none> <none>
[root@master ~]# curl http://172.16.104.5
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
//删除pod
[root@master ~]# kubectl delete pod nginx -n lsy
pod "nginx" deleted
//查看deployment,删除deployment
[root@master ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 19h
[root@master ~]# kubectl delete deployment nginx
//配置yaml文件
[root@master ~]# vim b.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: lsy
spec:
containers:
- image: nginx
name: pod
ports:
- name: web
containerPort: 80
protocol: TCP
[root@master ~]# kubectl apply -f b.yaml
pod/nginx created
[root@master ~]# kubectl delete -f b.yaml
pod "nginx" deleted
//打标签
[root@master ~]# kubectl label pod nginx version=1.0 -n lsy
pod/nginx labeled
//更新标签1
[root@master ~]# kubectl label pod nginx version=2.0 -n lsy --overwrite
pod/nginx labeled
//查看标签
[root@master ~]# kubectl get pod nginx -n lsy --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 94s version=2.0
//筛选标签
[root@master ~]# kubectl get pod nginx-test -n lsy --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-test 1/1 Running 0 2m43s run=nginx-test,version=1.2
//配置yaml
[root@master ~]# kubectl apply -f c.yaml
pod/nginx123 created
[root@master ~]#
[root@master ~]# kubectl get pods -n lsy --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx 1/1 Running 0 24m version=2.0
nginx-test 1/1 Running 0 21m run=nginx-test
nginx123 1/1 Running 0 34s app=nginx,version=3.0
//创建指定副本数量
[root@master ~]# kubectl create deployment nginx --image=nginx:latest --port=80 --replicas=3 -n lsy
deployment.apps/nginx created
[root@master ~]# kubectl get pods -n lsy
NAME READY STATUS RESTARTS AGE
nginx-7c79c4bf97-2gbpp 0/1 ContainerCreating 0 13s
nginx-7c79c4bf97-77kl4 1/1 Running 0 13s
nginx-7c79c4bf97-nn2ss 0/1 ContainerCreating 0 13s
//查看详细信息
[root@master ~]# kubectl describe deploy nginx -n lsy
Name: nginx
Namespace: lsy
CreationTimestamp: Tue, 24 Sep 2024 14:37:41 +0800
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=nginx
Replicas: 3 desired | 3 updated | 3 total | 2 available | 1 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: nginx:latest
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available False MinimumReplicasUnavailable
Progressing True ReplicaSetUpdated
OldReplicaSets: <none>
NewReplicaSet: nginx-7c79c4bf97 (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 2m5s deployment-controller Scaled up replica set nginx-7c79c4bf97 to 3
// 配置yaml
[root@master ~]# vim d.yaml
[root@master ~]# kubectl apply -f d.yaml
deployment.apps/lsynginx created
[root@master ~]# kubectl get deploy -n lsy
NAME READY UP-TO-DATE AVAILABLE AGE
lsynginx 5/5 5 5 20s
nginx 4/4 4 4 8m27s
[root@master ~]# kubectl get pods -n lsy
NAME READY STATUS RESTARTS AGE
lsynginx-7c5ddbdf54-2fqrc 1/1 Running 0 39s
lsynginx-7c5ddbdf54-bbx6v 1/1 Running 0 39s
lsynginx-7c5ddbdf54-g9qx7 1/1 Running 0 39s
lsynginx-7c5ddbdf54-k7jmj 1/1 Running 0 39s
lsynginx-7c5ddbdf54-l2rsb 1/1 Running 0 39s
nginx-7c79c4bf97-2gbpp 1/1 Running 0 8m46s
nginx-7c79c4bf97-77kl4 1/1 Running 0 8m46s
nginx-7c79c4bf97-nn2ss 1/1 Running 0 8m46s
nginx-7c79c4bf97-rrzjf 1/1 Running 0 5m35s