资源管理
一、资源管理介绍 在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