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 contextkubectl 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+OMITTEDserver: https://192.168.88.50:6443name: kubernetes
contexts:
- context:cluster: kubernetesuser: kubernetes-adminname: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-adminuser:client-certificate-data: REDACTEDclient-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/".+ ]] && continuedocker 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-0002Normal 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 myhttpNormal Started 2s kubelet Started container myhttp# 查看 work 名称空间的配置信息
[root@master ~]# kubectl describe namespaces work
Name: work
Labels: kubernetes.io/metadata.name=work
Annotations: <none>
Status: ActiveNo 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 1450inet 10.244.1.3 netmask 255.255.255.0 broadcast 10.244.2.255ether 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.repo0 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/".+ ]] && continuedocker 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%