k8s-资源管理、实战入门

资源管理

一、资源管理介绍 在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
相关推荐
斯普信专业组6 小时前
K8s企业应用之容器化迁移
云原生·容器·kubernetes
颜淡慕潇6 小时前
【K8S系列】Kubernetes 中 Service IP 分配 问题及解决方案【已解决】
后端·云原生·容器·kubernetes
摇曳 *7 小时前
Kubernetes:(三)Kubeadm搭建K8s 1.20集群
云原生·容器·kubernetes
网络笨猪7 小时前
K8S 容器可视化管理工具-kuboard 监控管理工具搭建
云原生·容器·kubernetes
陈小肚7 小时前
k8s 1.28.2 集群部署 NFS server 和 NFS Subdir External Provisioner
云原生·容器·kubernetes
丶213610 小时前
【云原生】云原生后端详解:架构与实践
后端·云原生·架构
小森饭10 小时前
Kubernetes运行大数据组件-运行hive
大数据·hive·云原生·kubernetes
白总Server11 小时前
孤岛架构与微服务架构区别
java·开发语言·后端·微服务·云原生·架构·scala
丶213613 小时前
【云原生】云原生后端:监控与观察性
后端·云原生·架构
CopyLower13 小时前
ZooKeeper的应用场景:深入探讨分布式系统中的多样化应用
分布式·zookeeper·云原生