云原生-集群管理

发布于:2025-07-08 ⋅ 阅读:(23) ⋅ 点赞:(0)

1.集群管理命令:

  a.如何管理集群?

-kubectl是用于控制Kubernetes集群的命令行工具

b.语法格式:

-kubectl [command]  [TYPE]     [NAME]    [flages]

command:子命令,如create、get、descrbe、delete

type:资源类型,可以表示为单数,复数或缩写形式

name:资源的总称,如果忽略,则显示所有资源信息

flages:指定可选标志,或附加的参数

2.管理主机授权

a.为其他主机添加管理权限

-安装集群管理工具kubectl:eg:

b.拷贝证书到目标主机

-证书默认路径:$ [HOME]/.kube/config

K8s集群管理案例:

信息查询命令
子命令	说明
help	用于查看命令及子命令的帮助信息
cluster-info	显示集群的相关配置信息
api-resources	查看当前服务器上所有的资源对象
api-versions	查看当前服务器上所有资源对象的版本
config	管理当前节点上的认证信息
命令示例
help

# 查看帮助命令信息
[root@master ~]# kubectl help version
Print the client and server version information for the current context.

Examples:
  # Print the client and server versions for the current context
  kubectl version
... ...
cluster-info

# 查看集群状态信息
[root@master ~]# kubectl cluster-info 
Kubernetes control plane is running at https://192.168.88.50:6443
CoreDNS is running at https://192.168.88.50:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
... ...
api-resources

# 查看资源对象类型
[root@master ~]# kubectl api-resources 
NAME             SHORTNAMES     APIVERSION      NAMESPACED      KIND
bindings                        v1              true            Binding
endpoints        ep             v1              true            Endpoints
events           ev             v1              true            Event
... ...
api-versions

# 查看资源对象版本
[root@master ~]# kubectl api-versions 
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
... ...
config

# 查看当前认证使用的用户及证书
[root@master ~]# kubectl config get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin
# 使用 view 查看详细配置
[root@master ~]# kubectl config view 
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.88.50:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
集群管理授权
[root@harbor ~]# vim /etc/hosts
192.168.88.240  harbor
192.168.88.50   master
192.168.88.51   node-0001
192.168.88.52   node-0002
192.168.88.53   node-0003

[root@harbor ~]# dnf makecache
[root@harbor ~]# dnf install -y kubectl
[root@harbor ~]# mkdir -p $HOME/.kube
[root@harbor ~]# rsync -av master:/etc/kubernetes/admin.conf $HOME/.kube/config
[root@harbor ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[root@harbor ~]# kubectl get nodes
NAME        STATUS   ROLES           AGE   VERSION
master      Ready    control-plane   24h   v1.29.2
node-0001   Ready    <none>          22h   v1.29.2
node-0002   Ready    <none>          22h   v1.29.2
node-0003   Ready    <none>          22h   v1.29.2

3.资源对象概述

a.什么是资源对象?

-K8s中把可以创建或配置的应用和服务称为资源对象

-我们在集群中创建的Pod、负载均衡、存储、网络服务等等都是资源对象

b.如何创建资源对象?

-简单资源对象可以使用“kubectl”直接创建

-高级资源对象需要使用“资源清单文件”创建

c.上传镜像到harbor仓库

d.使用run创建一个Pod资源对象

格式:kubectl run <pod名称>   [选项/参数]     ---image    <镜像:标签>

Pod管理案例:

Pod 管理
创建 Pod
上传镜像到 harbor 仓库
rsync -av public/myos.tar.xz 192.168.88.50:/root/
# 导入镜像
[root@master ~]# docker load -i myos.tar.xz
# 上传镜像到 library 项目
[root@master ~]# docker images|while read i t _;do
    [[ "${t}" == "TAG" ]] && continue
    [[ "${i}" =~ ^"harbor:443/".+ ]] && continue
    docker tag ${i}:${t} harbor:443/library/${i##*/}:${t}
    docker push harbor:443/library/${i##*/}:${t}
    docker rmi ${i}:${t} harbor:443/library/${i##*/}:${t}
done
创建 Pod
# 创建 Pod 资源对象
[root@master ~]# kubectl run myweb --image=myos:httpd
pod/myweb created

# 查询资源对象
[root@master ~]# kubectl get pods -o wide
NAME     READY   STATUS    RESTARTS   AGE   IP           NODE
myweb    1/1     Running   0          3s    10.244.1.3   node-0001

# 访问验证
[root@master ~]# curl http://10.244.1.3
Welcome to The Apache.

4.Pod概述

a.什么是Pod?

-Pod就像是豌豆荚一样,它由一个或者多个容器组成

-Pod是一个服务的多个进程的聚合单位

-Pod是Kubernetes中最小的管理元素

-Pod会自动维护在其中运行的容器

-Pod具有原子性、一致性特点

-同一个Pod共享网络与卷

Pod创建过程:

b.Pod状态

-Pod的status字段是一个PodStatus的对象,Pod对象总是应该处于其生命进程中以下几个相位(phase)之一.

5.Pod管理命令

a.系统中的核心服务都是运行在Pod中

-核心管理命令

续Pod管理命令:常用参数

-参数[ -o name]只显示名字

-参数[-o  wide]显示更加的详细信息

-参数[-o  yaml/json] 以Yaml/json格式显示资源对象.

b.系统命名空间

-default 默认的命名空间,不声明命名空间的Pod都在这

-Kube-node-lease 为高可用提供心跳监视的命名空间

-Kube-public公共数据,所有用户都可以读取它

-Kube-system系统服务对象所使用的命名空间

c.K8s系统核心服务都运行在Kube-system名称空间中

d.Kubectl create 语法格式

Kubectl create <资源对象>   [选项/参数]

e.Kubectl run 语法格式

kubectl run pod名称 [选项/参数]

f.kubectl describe 语法格式

kubectl describe  资源类型 [资源名称]   [选项/参数]

-Events下是事务日志,常用于排错

g.kubectl logs 语法格式

kubectl logs pod名称   [选项/参数]

6.Pod排错

a.排错三兄弟

-K8s的系统管理和排错一直都是难点和重点,在实际工作中排查问题、解决问题是我们必须要掌握的技能之一。

kubectl get

kubectl describe

kubectl logs

案例:

get

# 查看 Pod 资源对象
[root@master ~]# kubectl get pods
NAME     READY   STATUS    RESTARTS   AGE
myweb    1/1     Running   0          10m

# 只查看资源对象的名字
[root@master ~]# kubectl get pods -o name
pod/myweb

# 查看资源对象运行节点的信息
[root@master ~]# kubectl get pods -o wide
NAME     READY   STATUS    RESTARTS   AGE   IP           NODE
myweb    1/1     Running   0          10m   10.244.1.3   node-0001

# 查看资源对象详细信息,Yaml/Json 格式
[root@master ~]# kubectl get pod myweb -o yaml
apiVersion: v1
kind: Pod
metadata:
  name: myweb
... ...

# 查看名称空间
[root@master ~]# kubectl get namespaces 
NAME              STATUS   AGE
default           Active   39h
kube-node-lease   Active   39h
kube-public       Active   39h
kube-system       Active   39h

# 查看名称空间中的 Pod 信息
[root@master ~]# kubectl -n kube-system get pods
NAME                             READY   STATUS    RESTARTS      AGE
etcd-master                      1/1     Running   0             39h
kube-apiserver-master            1/1     Running   0             39h
kube-controller-manager-master   1/1     Running   0             39h
kube-scheduler-master            1/1     Running   0             39h
... ...
create

# 创建名称空间资源对象
[root@master ~]# kubectl create namespace work
namespace/work created

# 查看名称空间
[root@master ~]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   39h
kube-node-lease   Active   39h
kube-public       Active   39h
kube-system       Active   39h
work              Active   11s
run

# 在 work 名称空间创建 Pod
[root@master ~]# kubectl -n work run myhttp --image=myos:httpd
pod/myhttp created

# 查询资源对象
[root@master ~]# kubectl -n work get pods -o wide
NAME     READY   STATUS    RESTARTS   AGE   IP           NODE
myhttp   1/1     Running   0          3s    10.244.2.2   node-0002

# 访问验证
[root@master ~]# curl http://10.244.2.2
Welcome to The Apache.
describe

# 查看资源对象的配置信息
[root@master ~]# kubectl -n work describe pod myhttp
Name:             myhttp
Namespace:        work
Priority:         0
Service Account:  default
Node:             node-0002/192.168.88.52
... ...
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  7s    default-scheduler  Successfully assigned work/myhttp to node-0002
  Normal  Pulling    6s    kubelet            Pulling image "myos:httpd"
  Normal  Pulled     2s    kubelet            Successfully pulled image "myos:httpd" in 4.495s (4.495s including waiting)
  Normal  Created    2s    kubelet            Created container myhttp
  Normal  Started    2s    kubelet            Started container myhttp

# 查看 work 名称空间的配置信息
[root@master ~]# kubectl describe namespaces work
Name:         work
Labels:       kubernetes.io/metadata.name=work
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.
logs

# 查看容器日志
[root@master ~]# kubectl -n work logs myhttp
[root@master ~]# 
[root@master ~]# kubectl -n default logs myweb 
2022/11/12 18:28:54 [error] 7#0: *2 open() "... ..." failed (2: No such file or directory), ...... 

b.Pod管理命令(续)

管理命令:

--kubectl exec 在容器内执行命令

kubectl exec [选项/参数]  Pod名称 ---操作命令

-常用参数 -it分配交互式终端

--kubectl cp拷贝文件/目录

kubectl cp  [选项/参数] 原文件   目标文件

-路径格式  [Pod名称:绝对路径]

--kubectl delete语法格式

-集群中所有资源均可使用delete命令删除

kubectl delete  [选项/参数]  资源类型 资源名称

总结:

子命令 说明 备注
exec 在某一个容器内执行特定的命令 可选参数: -c 容器名称
cp 在容器和宿主机之间拷贝文件或目录 可选参数: -c 容器名称
delete 删除资源对象 可选参数: -l 标签

案例:

exec

# 在容器内执行命令
[root@master ~]# kubectl exec -it myweb -- ls 
index.html  info.php

[root@master ~]# kubectl exec -it myweb -- bash
[root@myweb html]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 10.244.1.3  netmask 255.255.255.0  broadcast 10.244.2.255
        ether 3a:32:78:59:ed:25  txqueuelen 0  (Ethernet)
... ...
cp

# 与容器进行文件或目录传输
[root@master ~]# kubectl cp myweb:/etc/yum.repos.d /root/aaa
tar: Removing leading `/' from member names
[root@master ~]# tree /root/aaa
/root/aaa
├── local.repo
├── Rocky-AppStream.repo
├── Rocky-BaseOS.repo
└── Rocky-Extras.repo

0 directories, 4 files
[root@master ~]# kubectl -n work cp /etc/passwd myhttp:/root/mima
[root@master ~]# kubectl -n work exec -it myhttp -- ls /root/
mima
delete

# 删除资源对象
[root@master ~]# kubectl delete pods myweb 
pod "myweb" deleted

# 删除 work 名称空间下所有 Pod 对象
[root@master ~]# kubectl -n work delete pods --all
pod "myhttp" deleted

# 删除名称空间
[root@master ~]# kubectl delete namespaces work 
namespace "work" deleted

7.资源监控组件

a.资源指标概述

资源指标有什么用?

在安装部署程序之后,必须要了解应用程序在部署后的性能以及资源使用情况。你可以通过检测 P od 容器或节点来了解整个集群的情况。

如何监控资源指标?

Kubernetes 的 Metrics-server 组件提供有关节点和 Pod 的资源使用情况的信息,包括 CPU 和内存的指标。如果将 Metrics-server 部署到集群中,就可以查询并使用到这些信息管理应用及服务。b.Metrics-server 是什么?

Metrics-Server 是集群核心监控数据的聚合器。通俗地说,它存储了集群中各节点和 Pod 的监控数据,并且提供了API以供查询和使用。Metrics-Server 通过 kubelet 获取 node 和 Pod 的 CPU、内存等监控数据。为调度器、弹性控制器、以及 Dashboard 等UI组件提供数据来源。

c.Matrics-server组件安装

-安装Metrics-server条件:

--必须启用聚合服务或使用kube-proxy代理转发

--节点必须启用身份验证和授权

--证书需要由集群证书颁发机构签名

----签发引导令牌

案例:资源监控组件

资源监控组件
配置授权令牌
[root@master ~]# echo 'serverTLSBootstrap: true' >>/var/lib/kubelet/config.yaml
[root@master ~]# systemctl restart kubelet
[root@master ~]# kubectl get certificatesigningrequests 
NAME        AGE   SIGNERNAME                      REQUESTOR            REQUESTEDDURATION   CONDITION
csr-2hg42   14s   kubernetes.io/kubelet-serving   system:node:master   <none>              Pending
[root@master ~]# kubectl certificate approve csr-2hg42
certificatesigningrequest.certificates.k8s.io/csr-2hg42 approved
[root@master ~]# kubectl get certificatesigningrequests 
NAME        AGE   SIGNERNAME                      REQUESTOR            REQUESTEDDURATION   CONDITION
csr-2hg42   28s   kubernetes.io/kubelet-serving   system:node:master   <none>              Approved,Issued
安装插件 metrics
# 上传镜像到私有仓库
[root@master ~]# cd plugins/metrics
[root@master metrics]# docker load -i metrics-server.tar.xz
[root@master metrics]# docker images|while read i t _;do
    [[ "${t}" == "TAG" ]] && continue
    [[ "${i}" =~ ^"harbor:443/".+ ]] && continue
    docker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}
    docker push harbor:443/plugins/${i##*/}:${t}
    docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
done

# 使用资源对象文件创建服务
[root@master metrics]# sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' components.yaml
140:     image: registry.k8s.io/metrics-server/metrics-server:v0.6.4
[root@master metrics]# kubectl apply -f components.yaml

# 验证插件 Pod 状态
[root@master metrics]# kubectl -n kube-system get pods
NAME                             READY   STATUS    RESTARTS   AGE
metrics-server-ddb449849-c6lkc   1/1     Running   0          64s
证书签发
# 查看节点资源指标
[root@master metrics]# kubectl top nodes
NAME        CPU(cores)    CPU%         MEMORY(bytes)     MEMORY%     
master      99m           4%           1005Mi            27%         
node-0001   <unknown>     <unknown>    <unknown>        <unknown>
node-0002   <unknown>     <unknown>    <unknown>        <unknown>
node-0003   <unknown>     <unknown>    <unknown>        <unknown>

#--------------- 在所有计算节点配置证书 -----------------
[root@node ~]# echo 'serverTLSBootstrap: true' >>/var/lib/kubelet/config.yaml
[root@node ~]# systemctl restart kubelet

#--------------- 在 master 签发证书 -------------------
[root@master ~]# kubectl certificate approve $(kubectl get csr -o name)
certificatesigningrequest.certificates.k8s.io/csr-t8799 approved
certificatesigningrequest.certificates.k8s.io/csr-69qhz approved
... ...
[root@master ~]# kubectl get certificatesigningrequests
NAME        AGE   SIGNERNAME                      REQUESTOR   CONDITION
csr-2hg42   14m   kubernetes.io/kubelet-serving   master      Approved,Issued
csr-9gu29   28s   kubernetes.io/kubelet-serving   node-0001   Approved,Issued
... ...
资源指标监控
# 获取资源指标有延时,等待 15s 即可查看
[root@master ~]# kubectl top nodes
NAME        CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master      83m          4%     1789Mi          50%       
node-0001   34m          1%     747Mi           20%       
node-0002   30m          1%     894Mi           24%       
node-0003   39m          1%     930Mi           25%  


网站公告

今日签到

点亮在社区的每一天
去签到