[Kubernetes] Kubernetes管理

王者杯·14天创作挑战营·第6期 10w+人浏览 301人参与

客户端命令kubectl

语法结构:kubectl 命令 类型 名称 参数

当名称为空时,代表查看所有

基础命令

部署metrics-server

metrics-server可以查看资源(CPU、内存、存储)使用

创建metrics-server资源

wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml
#修改镜像源
sed -i 's/registry.k8s.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' metrics-server-components.yaml

vim metrics-server-components.yaml
#添加
#metrics-server v0.8.0 版本后,安全要求较高,默认情况下必须配置 --kubelet-insecuretls,否则无法从 kubelet 拉取指标,导致探针失败。
   spec:
    containers:
    - args:
      - --cert-dir=/tmp
      - --secure-port=10250
      - --kubelet-insecure-tls    #添加这一行
      - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
      - --kubelet-use-node-status-port
      - --metric-resolution=15s
      image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.8.0

#部署
kubectl apply -f metrics-server-components.yaml

长时间出现以下情况说明出现问题

kubectl describe pod metrics-server-57999c5cf7-hgrk2 -n kube-system

可以看到时calico出现了问题

当出现calico卡死的情况时,执行下面的命令(一般只在虚拟机环境中出现)

kubectl rollout restart daemonset calico-node -n kube-system

显示1/1 running代表成功

使用kubectl top 查看资源

kubectl top pod -n kube-system
kubectl top node -n kube-system

部署命令

集群管理命令

故障诊断和调试命令

高级命令

设置命令

其他命令

集群Node管理

# 查看集群信息
kubectl cluster-info

# 查看集群节点信息
kubectl get nodes
# 查看集群节点详细信息
kubectl get nodes -o wide

查看节点描述详细信息

kubectl describe node master

worker node节点管理集群

使用kubeadm安装如果想在node节点管理就会报错

[root@node1 ~]# kubectl get nodes

解决方法:只要把master上的管理文件/etc/kubernetes/admin.conf拷贝到node节点的 $HOME/.kube/config就可以让node节点也可以实现kubectl命令管理

重点需要(kubectl命令,指向api-server节点及证书)

# 在node节点的用户家目录创建.kube目录
[root@node1 ~]# mkdir /root/.kube
# 在master节点把admin.conf文件复制到node节点
[root@master ~]# scp /etc/kubernetes/admin.conf node1:/root/.kube/config
# 在node节点验证
[root@node1 ~]# kubectl get nodes

dashboard界面

下载安装
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml

修改文件

vim recommended.yaml

应用修改后配置

kubectl apply -f recommended.yaml

查看Pod状态

kubectl get pods -n kubernetes-dashboard

查看Service暴露端口

kubectl get svc -n kubernetes-dashboard

访问dashboard界面

https://192.168.18.128:30001/ (注意是https)

创建访问令牌(Token)

配置管理员账户

创建rbac.yaml文件,内容如下:

vim rbac.yaml
#写入
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: dashboard-admin
  namespace: kube-system

应用配置并获取Token

kubectl apply -f rbac.yaml

获取token,k8s1.22版本引入,默认有效期1小时,每次执行命令会生成新token,旧token会自动消失

kubectl create token dashboard-admin --namespace kube-system

将token复制下来粘贴到浏览器中

完成部署

节点标签(label)

kubernetes集群由大量节点组成,可将节点打上对应的标签,然后通过标签进行筛选及查看,更好的进 行资源对象的相关选择与匹配。

查看节点标签信息

显示的标签以键值对形式出现,键名=值

kubectl get nodes --show-labels

设置节点标签信息

# 为节点node2打一个region=nanjing的标签
kubectl label node node2 region=nanjing

查看所有带region的标签

kubectl get nodes -L region

多维度标签

设置多维度标签,用于不同的需要区分的场景

#如把node1标签为上海,南区机房,测试环境,AI业务
kubectl label node node1 region=shanghai zone=south env=test bussiness=AI

查找zone=south的节点(键值对用小写l;键名用大写L)

kubectl get nodes -l zone=south

标签的修改(overwrite:使用复写功能)

kubectl label nodes node1 zone=west --overwrite=true

标签删除

使用key加一个减号的写法来取消标签

kubectl label node node1 bussiness-

标签选择器

用于筛选匹配特定标签的资源,主要分两类:

  1. 等值匹配(Equality-based)

    精确匹配键值: app=nginx (匹配 app 值为 nginx 的资源)

    排除匹配: env!=dev (排除 env=dev 的资源) 。

  2. 集合匹配(Set-based)

    key in (value1, value2) :匹配值在集合中的资源(如 env in (prod, staging) )

    key notin (value1) :排除指定值(如 tier notin (backend) )

    存在性检查: key (仅检查键是否存在) 。

# 在node1和node2上创建一个新标签
kubectl label node node1 os=centos7
kubectl label node node2 os=centos8
# 排除os标签为centos7的
kubectl get node -l os!=centos7

# 匹配值在集合中的资源
kubectl get nodes -l "os in(centos7,centos8)"

YAML声明式文件

YAML:仍是一种标记语言,但为了强调这种语言以数据做为中心,而不是以标记语言为重点。是一个可读性高,用来表达数据序列的格式。

基本语法

  1. 低版本(1.0、2.0)缩进时不允许使用Tab键,只允许使用空格

  2. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

  3. #标识注释,从这个字符一直到行尾,都会被解释器忽略

数据结构

  • 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)

  • 数组:一组按次序排列的值,又称为序列(sequence)/列表(list)

  • 纯量(scalars):单个的、不可再分的值

对象类型:对象的一组键值对,使用冒号结构表示

name: demisse
age: 24

Yaml 也允许另一种写法,将所有键值对写成一个行内对象

hash: { name: demisse,age: 24 }

数组类型:一组连词线开头的行,构成一个数组

game
- csgo
- starrail
- arknights

数组也可以采用行内表示法

game: [csgo,starrail,arknights]

复合结构:对象和数组可以结合使用,形成复合结构

纯量:纯量是最基本的、不可再分的值。以下数据类型都属于纯量

1 字符串 布尔值 整数 浮点数 Null
2 时间 日期

#数值直接以字面量的形式表示
number: 3.14

#布尔值用true和fa1se表示
isSet: true

#null用 ~ 表示
parent: ~

#时间采用 ISO8601 格式
iso8601:2025-7-11t20:00:00.10-05:00

#日期采用复合 iso8601 格式的年、月、日表示
date: 1990-07-10

#YAML 允许使用两个感叹号,强制转换数据类型
e: !!str 123
f: !!str true

字符串

字符串默认不使用引号表示

str: hello

如果字符串之中包含空格或特殊字符,需要放在引号之中

str: 'hello world'

单引号和双引号都可以使用,双引号不会对特殊字符转义

s1: '你好\n世界'
s2: "你好\n世界"

单引号之中如果还有单引号,必须连续使用两个单引号转义

str: 'let''s go'

字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为 空格

str: 第一行
 第二行
 第三行

多行字符串可以使用|保留换行符,也可以使用>折叠换行(配置文件场景)

names: |
tom
jerry
jack

YAML资源对象描述方法

在kubernetes中,一般使用yaml格式的文件来创建符合我们预期期望的pod,这样的yaml文件称为资源 清单文件。

案例说明

查阅使用手册说明

kubectl explain

创建namespace

vim ns.yaml
#写入
apiVersion: v1
kind: Namespace
metadata:
  name: web-test

创建pod资源

该配置包含Deployment和Service两部分。Deployment创建2个Tomcat Pod副本(使用官方镜像), Service通过NodePort类型将容器8080端口映射到主机30080端口,并通过8888服务端口暴露。访问方 式::

vim tomcat.yaml
#写入
apiVersion: v1
kind: ConfigMap
metadata:
  name: tomcat-web-content
data:
  index.html: |
    <html><body><h1>Hello Tomcat!</h1></body></html>
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tomcat    # 必须与template.metadata.labels完全匹配
  template:
    metadata:
      labels:
        app: tomcat    # 必须与selector.matchLabels一致
    spec:
      securityContext:
        runAsUser: 1000
        fsGroup: 1000
      containers:
      - name: tomcat
        image: tomcat:9.0.85-jdk11
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: tomcat-content
          mountPath: /usr/local/tomcat/webapps/ROOT/index.html
          subPath: index.html
      volumes:
      - name: tomcat-content
        configMap:
          name: tomcat-web-content
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
spec:
  type: NodePort
  selector:
    app: tomcat    # 需与Pod标签匹配
  ports:
  #cluster-IP端口
  - port: 80
    #pod端口
    targetPort: 8080
    #对外访问端口
    nodePort: 30080

创建资源

kubectl apply -f tomcat.yaml

查看资源

kubectl get deployment,pod,svc

在内部和外部分别测试访问

命名空间(Namespace)

作用

  • Namespace是对一组资源和对象的抽象集合。

  • 常见的 pod,service,deployment 等都是属于某一个namespace的(默认是 default)。

  • 不是所有资源都属于namespace,如nodes,persistent volume,namespace 等资源则不属于任 何namespace。

查看namespace
kubectl get namespaces
#namespaces可简写为ns

  • 所有未指定Namespace的对象都会被默认分配在default命名空间

  • kube-public命名空间下的资源可以被所有人访问

  • 所有由Kubernetes系统创建的资源都处于kube-system命名空间

查看namespace中的资源

使用kubectl get all --namespace=命名空间名称 可以查看此命名空间下的所有资源

kubectl get all --namespace=kube-system

查看所有pod资源

kubectl get pods -A
# A指所有命名空间

创建namespace

命令创建
kubectl create namespace web123
kubectl get ns

YAML文件创建
  • k8s中几乎所有的资源都可以通这YAML编排来创建

  • 可以使用kubectl edit 资源类型 资源名编辑资源的YAML语法

kubectl edit namespaces web123

也可使用kubectl get 资源类型 资源名 -o yaml来查看

kubectl get ns web123 -o yaml

  • 还可通过 kubectl explain 资源类型 来查看语法文档

查看namespace相关语法参数

kubectl explain namespace

查看namespace下级metadata的相关语法参数

kubectl explain namespace.metadata

查看namespace下级metadata再下级name的相关语法参数

kubectl explain namespace.metadata.name

编写创建namespace的YAML文件

vim create_web2.yaml
#写入
apiVersion: v1 #api版本
kind: Namespace #类型为namespace
metadata: #定义namespace的元数据属性
  name: web2 #定义name为web2

使用 kubctl apply -f 应用YAML文件

kubectl apply -f create_web2.yaml

删除namespace

注意:

  • 删除一个namespace会自动删除所有属于该namespace的资源(类似MySQL中drop库会删除库里 的所有表一样,请慎重操作)

  • default,kube-system,kube-public命名空间不可删除

命令删除
kubectl delete namespaces web123
YAML文件删除
kubectl delete -f web123.yaml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值