K8s3️⃣资源管理

1、资源管理

K8s 本质是一组服务器集群,万物皆资源对象

通过操作资源对象,实现对 K8s 的管理。

示例(下划线粗体部分是资源)

  • 部署服务:在 Pod 中运行容器,在容器中部署微服务应用。

  • 访问服务:通过 K8s 提供的 Service

  • 数据持久化:通过 K8s 提供的存储系统

    image-20200406225334627

2、资源管理方式

关于 kubectl 命令,见👉 本文附 1

Hint对同一个资源对象的单次操作,只能选用其中一种方式。

  • 指令式命令:直接使用命令操作资源。

  • 对象配置:先编写配置文件,再使用命令操作资源(指令式、声明式)。

    指令式命令 对象配置(指令式) 对象配置(声明式)
    操作方式 命令 + 追加选项 命令 + 配置文件 apply + 配置文件
    操作对象 活跃对象 单个文件 目录
    适用环境 测试、开发 生产 生产
    审计和跟踪(历史记录)
    复用性(模板)
    其它 简单易用 项目庞大时配置文件多,操作麻烦 不易于调试

2.1、指令式命令

指令式命令命令 + 追加选项

以参数的形式,将选项追加在命令之后。

示例:创建一个 namespace 和 pod,演示基本命令。

2.1.1、创建 ns

创建并查看 namespace

# 创建
kubectl create namespace 名称
# 查看
kubectl get namespace
  1. 列出 ns

    image-20220614113128632

  2. 创建一个名为 temp 的 ns,查看

    image-20220614113240151

2.1.2、创建 Pod

操作 Pod 时,若没有指定 ns,默认是 default。

  1. 创建并运行一个 Pod

    • run 通过 pod 控制器运行 Pod

    • --image 指定 Nginx 最新镜像,-n 指定 ns 为 temp

    • 若创建 Pod 时没有指定 ns,默认属于 default。

      kubectl run pod --image=nginx:latest -n temp
      
  2. 查看 Pod

    • 若没有指定任何参数,默认列出 default 命名空间下的 Pod。

      • 参数可搭配使用,更多参数👉 kubectl get --help

        # default下的
        kubectl get pod
        # 指定ns下的
        kubectl get pod -n 命名空间
        # 指定名称
        kubectl get pod 名称
        # 以yaml格式展示
        kubectl get pod pod_name -o yaml
        
  3. 查看 Pod 创建过程

    • kubectl describe pod 名称 -n 命名空间
      
    • image-20220614115235644

2.1.3、删除

删除 Pod 和 ns

# 指定pod名称
kubectl delete pod 名称
# 指定ns名称
kubectl delete namespace 名称
  1. Pod:原来的 Pod 被删除,但 Pod 控制器启动了一个新的 Pod

    image-20220614122013417

  2. ns:ns 和 Pod 均被删除。

    image-20220614122338078

2.2、对象配置(❗)

Hint:在配置文件中定义对象的属性选项(推荐 YAML)

2.2.1、指令式

指令式对象配置命令 + 配置文件

指定命令,即对资源的操作(见 2.1)

示例:定义配置文件,实现 3.1 中的案例命令。

① YAML 文件

# ns
apiVersion: v1
kind: Namespace
metadata:
  name: temp
---
# Pod
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  namespace: temp
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest

② 创建:create

  • kubectl 根据指定的 create 指令,-f 指定 nginx.yaml 文件,创建资源。

    kubectl create -f nginx.yaml
    
  • 若重复执行指令,会提示资源已创建。

    image-20220614151430319

③ 查看:get

  • kubectl 根据指定给的 get 指令,-f 指定 nginx.yaml 文件,查看资源

    image-20220614151535973

  • 查看 pod 和 ns

    image-20220614151742831

④ 删除:delete

  • kubectl 根据指定给的 delete 指令,-f 指定 nginx.yaml 文件,删除资源

    image-20220614151904492

  • 删除资源后(未创建资源时),再次执行删除(查询)指令,会提示资源不存在。

    image-20220614151956958

2.2.2、声明式

声明式对象配置apply 命令 + 配置文件

无需指定对资源的操作,kubectl 会自动检测创建/更新/删除。

① YAML 文件

(同 3.2.1)

# ns
apiVersion: v1
kind: Namespace
metadata:
  name: temp
---
# Pod
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  namespace: temp
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest

② apply 指令

kubectl apply -f 文件名
  1. kubectl 检测到资源未创建创建资源

  2. kubectl 检测到资源已创建、配置文件未变动没有任何变动

    image-20220614152445658

  3. 修改配置文件

    • 修改 Nginx 版本,再次执行 apply 指令。

    • kubectl 检测到资源已创建、配置文件有变动更新配置

      image-20220614153339812

  4. 查看 Pod 资源情况:注意 Nginx 版本变化

    • kubectl describe pod 名称 -。n 命名空间
      
    • image-20220614153324403

最佳实践(❗)

如何正确选用资源管理方式?

适用场景 命令
指令式命令 查询 kubectl get(describe) 资源名称
对象配置(指令式) 删除 kubectl delete -f XXX.yaml
对象配置(声明式) 创建,更新 kubectl apply -f XXX.yaml

1、kubectl(❗)

kubectl

与 K8s 集群的控制面板(master)进行通信的命令行工具,用于管理资源。

语法: (kubectl 命令补全见附 2)

  • command:对资源执行的操作

  • TYPE:资源类型(不区分大小写/单复数/缩写)

  • NAME:资源名称(可选,大小写敏感)

  • flags:选项/参数(可选)

    kubectl [command] [TYPE] [NAME] [flags]
    

1.1、操作(command)

Hint:输入 kubectl help 查看可用操作。

常用操作如下:

① 基本

含义
create 创建资源
expose 暴露服务端口
run 运行镜像(容器)
get 获取资源
edit 编辑资源
delete 删除资源

② 部署 & 排错 & 调试

含义
cluster-info 集群信息
describe 描述资源详情
logs 查看容器在 Pod 中的日志
attach 进入运行中的容器
exec 在容器中执行命令
cp 在容器内外复制文件

③ 高级 & 设置

含义
apply 对资源应用指定配置
patch 更新资源的信息
replace 覆盖资源
label 更新资源标签

④ 其它

含义
api-resources 列出服务器支持的 API 资源
api-versions 列出服务器支持的 API 版本
version 列出 Client 和 Server 版本

1.2、类型(TYPE)

Hint:通过 kubectl api-resources 查看可用资源类型。

常见资源如下:

① 集群级别

缩写
namespace ns
nodes no

② Pod 相关

缩写
Pods po
replicationcontrollers rc
daemonsets ds
deployments deploy
replicasets rs
statefulsets sts
horizontalpodautoscalers hpa
cronjobs cj
jobs

③ 服务发现

缩写
services svc
ingresses ing

④ 存储资源

缩写
volumeattachments
persistentvolumeclaims pvc
persistentvolumes pv

⑤ 配置资源

作用
configmaps cm
secrets

1.3、选项(flag)

kubectl 命令默认输出为纯文本格式,

使用 -o--output)选项,指定详细信息

常用输出选项值:

含义
-o json JSON 格式输出
-o name 仅输出资源名称
-o wide 纯文本格式输出,包含所有附加信息
-o yaml YAML 格式输出

除了 -o,flag 有其它👉 输出选项

1

2、kubectl 命令补全

👉 Linux 中 kubectl 命令补全

Linux 服务器默认没有 kubectl 的命令补全,需要额外配置。

配置后,按 tab 即可实现命令补全。

  1. 安装 bash-completion 并执行

    yum install -y bash-completion
    source /usr/share/bash-completion/bash_completion
    
  2. 加载 kubectl completion

    # 本次会话临时生效
    source <(kubectl completion bash)
    # 重启会话后永久生效
    echo "source <(kubectl completion bash)" >> ~/.bashrc
    

3、node 节点使用

kubectl:与 K8s 集群的控制面板(master)进行通信的命令行工具,用于管理资源。

Q:kubectl 可以在 node 节点上运行吗 ?

A:可以(但不建议),仅需一个配置文件 👉 将 master 节点的 $HOME/.kube 文件,复制到 node 节点。

# 在master节点执行以下命令
scp -r HOME/.kube node1: HOME/
posted @ 2022-06-10 09:59  Jaywee  阅读(69)  评论(0编辑  收藏  举报

👇