k8s资源管理

k8s资源管理

一. 资源管理

1. 介绍
  • 在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes

  • 将资源放在文件中,用文件来管理

  • kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。

    • 镜像可以自己做,也可以使用官方的
  • kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在Pod中,而kubernetes一般也不会直接管理Pod,而是通过Pod控制器来管理Pod的。

  • Pod可以提供服务之后,就要考虑如何访问Pod中服务,kubernetes提供了Service资源实现这个功能。

  • 如果Pod中程序的数据需要持久化,kubernetes还提供了各种存储系统。

img

通过service(相当于暴露端口号)来访问pod(容器)
2. YAML语言介绍
2.1 YAML是一个类似 XML、JSON 的标记性语言。它强调以数据为中心,并不是以标识语言为重点。因而YAML本身的定义比较简单,号称"一种人性化的数据格式语言"。
<wangqing>
    <age>15</age>
    <address>Wuhan</address>
</wangqing>

wangqing:
  age: 15
  address: Wuhan
2.2 YAML的语法比较简单,主要有下面几个:
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格( 低版本限制 )
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释
2.3 YAML支持以下几种数据类型:
  • 纯量:单个的、不可再分的值

  • # 纯量, 就是指的一个简单的值,字符串、布尔值、整数、浮点数、Null、时间、日期
    # 1 布尔类型
    c1: true (或者True)
    # 2 整型
    c2: 234
    # 3 浮点型
    c3: 3.14
    # 4 null类型 
    c4: ~  # 使用~表示null
    # 5 日期类型
    c5: 2018-02-17    # 日期必须使用ISO 8601格式,即yyyy-MM-dd
    # 6 时间类型
    c6: 2018-02-17T15:02:31+08:00  # 时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
    # 7 字符串类型
    c7: wangqing     # 简单写法,直接写值 , 如果字符串中间有特殊字符,必须使用双引号或者单引号包裹 
    c8: line1
        line2     # 字符串过多的情况可以拆成多行,每一行会被转化成一个空格
    
  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hash) / 字典(dictionary)

  • # 对象
    # 形式一(推荐):
    wangqing:
      age: 15
      address: Wuhan
    # 形式二(了解):
    wangqing: {age: 15,address: Wuhan}
    
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

  • # 数组
    # 形式一(推荐):
    address:
      - 武昌
      - 江夏  
    # 形式二(了解):
    address: [武昌,江夏]
    
  • 小提示:
    
    1 书写yaml切记: 后面有内容要加一个空格
    
    2 如果需要将多段yaml配置放在一个文件中,中间要使用---分隔
    
    3 下面是一个yaml转json的网站,可以通过它验证yaml是否书写正确
    
    https://www.json2yaml.com/convert-yaml-to-json
    
3. 资源管理方式
  • 命令式对象管理:直接使用命令去操作kubernetes资源

    kubectl run nginx-pod --image=nginx:1.17.1 --port=80

    [root@k8s-master ~]# kubectl run myhttpd --image=xiaoyinguhong/httpd:alpine-2012.3 --port=80
    pod/myhttpd created
    [root@k8s-master ~]# kubectl get pods
    NAME                     READY   STATUS    RESTARTS      AGE
    apache-855464645-4zxf2   1/1     Running   1 (86m ago)   12h
    httpd-86f7c74499-6qmkf   1/1     Running   0             20m //控制器管理的pod
    myhttpd                  1/1     Running   0             14s//自主式管理的pod
    
  • 命令式对象配置:通过命令配置和配置文件去操作kubernetes资源

    kubectl create/patch -f nginx-pod.yaml

  • 声明式对象配置:通过apply命令和配置文件去操作kubernetes资源

    kubectl apply -f nginx-pod.yaml

类型操作对象适用环境优点缺点
命令式对象管理对象测试简单只能操作活动对象,无法审计、跟踪
命令式对象配置文件开发可以审计、跟踪项目大时,配置文件多,操作麻烦
声明式对象配置目录开发支持目录操作意外情况下难以调试
3.1 命令式对象管理
  • kubectl命令
kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl命令的语法如下:

kubectl [command] [type] [name] [flags]
  • comand:指定要对资源执行的操作,例如create、get、delete
  • type:指定资源类型,比如deployment、pod、service
  • name:指定资源的名称,名称大小写敏感
  • flags:指定额外的可选参数
# 查看所有pod
kubectl get pod 

# 查看某个pod
kubectl get pod pod_name

# 查看某个pod,以yaml格式展示结果
kubectl get pod pod_name -o yaml

[root@k8s-master ~]# kubectl get pods httpd -o yaml
      
      
      
      
[root@k8s-master ~]# kubectl get pods
NAME                     READY   STATUS    RESTARTS       AGE
apache-855464645-4zxf2   1/1     Running   1 (104m ago)   12h
httpd                    1/1     Running   0              17m
httpd-86f7c74499-6qmkf   1/1     Running   0              37m
myhttpd                  1/1     Running   0              18m
//名字叫httpd的pod       
[root@k8s-master ~]# kubectl get pods httpd
NAME    READY   STATUS    RESTARTS   AGE
httpd   1/1     Running   0          17m
[root@k8s-master ~]# 
//名字叫httpd的控制器
[root@k8s-master ~]# kubectl get deployment httpd
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
httpd   1/1     1            1           40m
[root@k8s-master ~]#           
  • 资源类型
kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:

[root@k8s-master ~]# kubectl api-resources
  • 经常使用的资源有下面这些:
资源分类资源名称缩写资源作用
集群级别资源nodesno集群组成部分
namespacesns隔离Pod
pod资源podspo装载容器
pod资源控制器replicationcontrollersrc控制pod资源
replicasetsrs控制pod资源
deploymentsdeploy控制pod资源
daemonsetsds控制pod资源
jobs控制pod资源
cronjobscj控制pod资源
horizontalpodautoscalershpa控制pod资源
statefulsetssts控制pod资源
服务发现资源servicessvc统一pod对外接口
ingress//控制访问,流向ing统一pod对外接口
存储资源volumeattachments存储
persistentvolumespv存储
persistentvolumeclaimspvc存储
配置资源configmapscm配置
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的数量
高级命令applyrc通过文件对资源进行配置
label标签更新资源上的标签
其他命令cluster-info集群信息显示集群信息
version版本显示当前Server和Client的版本
  • [root@k8s-master ~]# kubectl cluster-info
    Kubernetes control plane is running at https://192.168.232.128:6443
    CoreDNS is running at https://192.168.232.128:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    [root@k8s-master ~]# 
    
  • 以一个namespace / pod的创建和删除简单演示下命令的使用

1.获取namespace
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   21h
kube-flannel      Active   21h
kube-node-lease   Active   21h
kube-public       Active   21h
kube-system       Active   21h

2.创建一个namespace(名称空间)
[root@k8s-master ~]# kubectl create ns mushuang
namespace/mushuang created
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   21h
kube-flannel      Active   21h
kube-node-lease   Active   21h
kube-public       Active   21h
kube-system       Active   21h
mushuang          Active   3s
[root@k8s-master ~]# 

3.在此namespace下创建并运行一个nginx的Pod,-n指定名称空间,不指定在默认位置运行
[root@k8s-master ~]# kubectl run pod --image=nginx -n mushuang
pod/pod created

4.查看新创建的pod    
[root@k8s-master ~]# kubectl get pods -n mushuang
NAME   READY   STATUS    RESTARTS   AGE
pod    1/1     Running   0          19s
[root@k8s-master ~]# 
    
5.
kubectl delete pod pod -n mushuang
前面的pod是对象,后面的pod是名称,-n,指定名称空间
[root@k8s-master ~]# kubectl get pods -n mushuang
NAME   READY   STATUS    RESTARTS   AGE
pod    1/1     Running   0          3m45s
[root@k8s-master ~]# kubectl delete pod pod -n mushuang
pod "pod" deleted
[root@k8s-master ~]# kubectl get pods -n mushuang
No resources found in mushuang namespace.
[root@k8s-master ~]#       
      
6.删除指定的pod  
[root@k8s-master ~]# kubectl get pods
NAME                     READY   STATUS    RESTARTS       AGE
apache-855464645-4zxf2   1/1     Running   1 (134m ago)   13h
httpd                    1/1     Running   0              47m
httpd-86f7c74499-6qmkf   1/1     Running   0              68m
myhttpd                  1/1     Running   0              48m
[root@k8s-master ~]# kubectl delete pod myhttpd
pod "myhttpd" deleted
[root@k8s-master ~]# 
      
      
7.删除指定的控制器,然后pod就删除了
[root@k8s-master ~]# kubectl get pods
NAME                     READY   STATUS    RESTARTS       AGE
apache-855464645-4zxf2   1/1     Running   1 (137m ago)   13h
httpd                    1/1     Running   0              50m
httpd-86f7c74499-6qmkf   1/1     Running   0              70m
[root@k8s-master ~]# kubectl get deploy
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
apache   1/1     1            1           13h
httpd    1/1     1            1           71m
[root@k8s-master ~]# kubectl delete deploy httpd
deployment.apps "httpd" deleted
[root@k8s-master ~]# kubectl get deploy
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
apache   1/1     1            1           13h
[root@k8s-master ~]# kubectl get pods
NAME                     READY   STATUS    RESTARTS       AGE
apache-855464645-4zxf2   1/1     Running   1 (138m ago)   13h
httpd                    1/1     Running   0              52m
[root@k8s-master ~]#       
3.2 命令式对象配置
  • 命令式对象配置就是使用命令配合配置文件一起来操作kubernetes资源。
1. 创建一个nginxpod.yaml,内容如下:
[root@k8s-master ~]# mkdir manifest
[root@k8s-master ~]# cd manifest/
[root@k8s-master manifest]# vi nginxpod.yml
[root@k8s-master manifest]# cat nginxpod.yml 
apiVersion: v1  //版本
kind: Namespace  //类型
metadata:  //原数据
  name: dev

---

apiVersion: v1
kind: Pod  //类型,自主式pod
metadata:
  name: nginxpod
  namespace: dev
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest
[root@k8s-master manifest]# 

2. 执行create命令,创建资源:
[root@k8s-master manifest]# kubectl create -f nginxpod.yml 
namespace/dev created
pod/nginxpod created

3. 执行get命令,查看资源
[root@k8s-master manifest]# kubectl get ns
NAME              STATUS   AGE
default           Active   29h
dev               Active   8s
kube-flannel      Active   29h
kube-node-lease   Active   29h
kube-public       Active   29h
kube-system       Active   29h
[root@k8s-master manifest]# kubectl get pods -n dev
NAME       READY   STATUS    RESTARTS   AGE
nginxpod   1/1     Running   0          18s
[root@k8s-master manifest]# 

4. 此时发现创建了两个资源对象,分别是namespace和pod
[root@k8s-master manifest]# kubectl get -f nginxpod.yml 
NAME            STATUS   AGE
namespace/dev   Active   117s

NAME           READY   STATUS    RESTARTS   AGE
pod/nginxpod   1/1     Running   0          117s
[root@k8s-master manifest]# 

5. 执行delete命令,删除资源,发现名称空间没了,po也没了    [root@k8s-master manifest]# kubectl delete -f nginxpod.yml 
namespace "dev" deleted
pod "nginxpod" deleted
[root@k8s-master manifest]# kubectl get -f nginxpod.yml 
Error from server (NotFound): namespaces "dev" not found
Error from server (NotFound): namespaces "dev" not found
[root@k8s-master manifest]# kubectl get ns
NAME              STATUS   AGE
default           Active   29h
kube-flannel      Active   29h
kube-node-lease   Active   29h
kube-public       Active   29h
kube-system       Active   29h
[root@k8s-master manifest]#         
  • 总结:

  • 命令式对象配置的方式操作资源,可以简单的认为:命令  +  yaml配置文件(里面是命令需要的各种参数)
    
  • 查看kubectl explain -h 这个命令

  • [root@k8s-master manifest]# kubectl explain -h
    
    [root@k8s-master manifest]# kubectl explain pods/deploy
    
    [root@k8s-master manifest]# kubectl explain pods.metadata
    
    [root@k8s-master manifest]# kubectl explain deploy.spec
     selector     <Object> -required-//-required-这个必须给
    
3.3 声明式对象配置
  • 声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply。
1. 首先执行一次kubectl apply -f yaml文件,发现创建了资源
[root@k8s-master manifest]# kubectl apply -f nginxpod.yml 
namespace/dev created
pod/nginxpod created
[root@k8s-master manifest]# kubectl get -f nginxpod.yml 
NAME            STATUS   AGE
namespace/dev   Active   10s

NAME           READY   STATUS    RESTARTS   AGE
pod/nginxpod   1/1     Running   0          10s
[root@k8s-master manifest]# 


2. 再次执行一次kubectl apply -f yaml文件,发现说资源没有变动
[root@k8s-master manifest]# kubectl apply -f nginxpod.yml 
namespace/dev unchanged
pod/nginxpod unchanged
[root@k8s-master manifest]# 
 
3. 修改文件,发现再次创建pod,又创建了一个,然后删除,把他们都删了,因为删除了名称空间
[root@k8s-master manifest]# cat nginxpod.yml 
apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest
[root@k8s-master manifest]# 

[root@k8s-master manifest]# kubectl apply -f nginxpod.yml 
namespace/dev unchanged
pod/nginx created
[root@k8s-master manifest]# kubectl get -f nginxpod.yml 
NAME            STATUS   AGE
namespace/dev   Active   2m40s

NAME        READY   STATUS    RESTARTS   AGE
pod/nginx   1/1     Running   0          10s
[root@k8s-master manifest]# kubectl get pods -n dev
NAME       READY   STATUS    RESTARTS   AGE
nginx      1/1     Running   0          24s
nginxpod   1/1     Running   0          2m54s
[root@k8s-master manifest]# 

发现都删除了
[root@k8s-master manifest]# kubectl delete -f nginxpod.yml 
namespace "dev" deleted
pod "nginx" deleted
[root@k8s-master manifest]# kubectl get pods -n dev
No resources found in dev namespace.
[root@k8s-master manifest]#       
  • 总结:
其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)
使用apply操作资源:
   如果资源不存在,就创建,相当于 kubectl create
   如果资源已存在,就更新,相当于 kubectl patch

要起一个容器,在哪个pod上运行,pod是什么类型的pod,pod要跑在哪个名称空间
4. 在普通用户上使用kubectl
1. 在master主机
[root@k8s-master ~]# useradd tom

[root@k8s-master ~]# su - tom
Last login: Wed Sep  7 20:01:26 CST 2022 on pts/2
[tom@k8s-master ~]$ mkdir -p $HOME/.kube
[tom@k8s-master ~]$ ls -a
.   .bash_history  .bash_profile  .kube
..  .bash_logout   .bashrc
[tom@k8s-master ~]$ 

[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf ~tom/.kube/config
[root@k8s-master ~]# chown -R tom.tom ~tom/.kube/config
[root@k8s-master ~]# ll ~tom/.kube/config
-rw------- 1 tom tom 5643 Sep  7 20:03 /home/tom/.kube/config
[root@k8s-master ~]# 

临时将环境变量去掉
[tom@k8s-master ~]$ export KUBECONFIG=
[tom@k8s-master ~]$ kubectl get nodes
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   30h   v1.25.0
k8s-node1    Ready    <none>          25h   v1.25.0
k8s-node2    Ready    <none>          25h   v1.25.0
[tom@k8s-master ~]$ 
  
2. node1和node2配置相同  
[root@k8s-node1 ~]# useradd tom
[root@k8s-node1 ~]# su - tom
[tom@k8s-node1 ~]$ mkdir -p $HOME/.kube
[tom@k8s-node1 ~]$ ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .kube
[tom@k8s-node1 ~]$ exit
logout
[root@k8s-node1 ~]# cp -i /etc/kubernetes/admin.conf ~tom/.kube/config
[root@k8s-node1 ~]# chown -R tom.tom ~tom/.kube/config
[tom@k8s-node1 ~]$ export KUBECONFIG=
[tom@k8s-node1 ~]$ kubectl get nodes
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   30h   v1.25.0
k8s-node1    Ready    <none>          25h   v1.25.0
k8s-node2    Ready    <none>          25h   v1.25.0
[tom@k8s-node1 ~]$   
5. 使用推荐: 三种方式应该怎么用 ?
创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml

删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml

查询资源 使用命令式对象管理 kubectl get(describe) 资源名称

二. k8s

1. k8s架构
1.1 master
  • api server:负责接收并处理请求
  • scheduler:调度容器创建的请求
  • controller:确保已创建的容器处于健康状态
  • controller manager:确保后端节点上的控制器处于健康状态
1.2 nodes
  • kubelet:与master通信的集群代理
  • 容器引擎:docker
2. k8s专业术语
2.1 pod
  • K8s的最小调度逻辑单元

  • pod可以理解为是容器的外壳,它为容器做了一层抽象的封装

  • pod内部主要是用来放容器的

  • pod的特点是可以将多个容器加入到同一个网络名称空间中

  • 一个pod中可以包含多个容器

  • 同一个pod中的不同容器可以共享存储卷

    • 在这里插入图片描述
  • 一个pod上无论是有一个容器还是有多个容器,一旦将此pod调度到某node上运行时,这一个pod内的所有容器只能运行在同一个node上

2.2 node
  • node是k8s集群中的工作节点,负责运行由master指派的各种任务。而最核心的任务就是以pod形式运行容器
  • node可以是任何形式的计算设备,只要此设备上能够有传统意义上的CPU、内存、存储空间,并且能装上k8s的集群代理程序,它都可以作为整个k8s集群一个成员
3. k8s基础概念
3.1 pod分类
  • 自主式pod

    • 自我管理的pod,创建以后仍然需要提交给apiserver,由apiserver接收以后借助于调度器将其调度至指定的node节点,由node启动此pod
    • 如果此pod出现故障,需要重启容器则由kubelet来完成
    • 如果node节点故障了,那么此pod将会消失。其无法实现全局调度。所以不推荐使用此种pod
  • 控制器管理的pod

    • ReplicationController:当启动一个pod时,这个pod如果不够用可以再启一个副本,而后由控制器来管理同一类pod的各种副本与对象。一旦副本少了就会自动增加。采取多退少补的规则,精确符合我们所定义的期望(多的减少,少的增加)。
    • 支持滚动更新(一部分,一部分的更新)
  • 常见的pod控制器

    • ReplicaSet:由一个名叫Deployment的声明式更新的控制器来管理
    • Deployment:Deployment只能管理无状态的应用(有状态:容器里面有数据,无状态:容器里面没数据)
    • StateFulSet:有状态副本集,可以管理有状态的应用
    • DaemonSet:如果需要在每个node上运行一个副本的时候可以DaemonSet
    • Job
    • Cronjob
    • 以上每种控制器都是用来实现一
      种特定的应用管理的。
3.2 核心组件
  • hpa

    • Deployment还支持二级控制器
    • HPA(HorizontalPodAutoscaler,水平pod自动伸缩控制器),自动根据你的要求(定义范围)进行增加和删除
    • —般情况下我们可以确保一个node上有2个pod在运行,万一用户访问流量增加,2个pod不足以承载这么多访问量怎么办?此时我们就应该要增加pod资源,那么到底应该加几个?
    • HPA控制器可自动监控pod、自动进行扩展。(可以根据自己定义的范围进行自动监控)
  • service

    • 服务发现,

    • pod是有生命周期的,一个pod随时都有可能离去,随时都有可能会有其他pod加进来,假如它们提供的是同一种服务,客户端是无法通过固定的手段来访问这些pod的,因为pod本身是不固定的,它们随时可能被替换掉,无论使用主机名还是IP地址,都随时会被替换掉。

    • 为了尽可能的降低客户端与pod间协调的复杂度,k8s为每一组提供同类服务的pod和其客广端之间添加了一个中间层,这个中间层是固定的,这个中间层就叫service

    • 中间层
      在这里插入图片描述

      • service只要不被删除,其地址与名称皆是固定的,当客户端需要在其配置文件中写上访问某个服务时,它不再需要自动发现,只需要在配置文件中写明service的名称即可,而这个service是个调度器,其不但能够提供一个稳定的访问入口,还可以做反向代理,当service接收到客户端的请求后,会将其代理到后端的pod之上,一旦pod宕机了会立即新建一个pod,这个新建的pod会立即被service关联上,作为service后端的可用pod之一
    • 客户端程序访问服务都是通过IP+端口或者主机名+端口的方式来实现的。而service关联后端的pod不是靠它的lP和主机名,而是靠pod的标签选择器。只要创建的pod的label是统一的,无论P地址和主机如何改变,其都能被service所识别。只要pod属于标签选择器,只要其在service的管理范围之内,则具就会被关联到service中,当这个动态的pod关联到service中之后,再进行动态的探测此pod的P地址、端口,再将其作为自己后端可调度的可用服务器主机对象。因此,客户端的请求发送到service,然后由service代理到后端真实的pod中的容器进行响应。

    • service不是一个程序,也不是一个组件,它只是一个iptables的dnat规则

    • service作为k8s的对象,有其自身的名称,而service的名称相当于服务的名称,而这个名称可以被解析。

  • addons附件

    • dns pod
      • 装完k8s后第一件事就需要在k8s集群上部署一个dns pod,以确保各service的名称能够被解析
      • 可以动态改变,包括动态创建、动态删除、动态修改
      • 比如把service的名称改了,dnspod会自动触发,将dns解析记录中的名称也给改掉;假如我们手动把service的ip地址给改了,改完以后会自动触发,将dns服务中的解析记录给改掉。
      • 如此一来,客户端去访问pod资源的时候可以直接访问service的名称,然后由集群中专用的dns服务来负责解析。
    • 这种pod是k8s自身的服务就需要用到的pod,所以我们把它称为基础性的系统架构级的pod对象,而且它们也被称为集群附件

三. k8s命令介绍

1. 查看相关命令
#查看kubeadm生成的token
kubeadm token list

kubectl get nodes                           #查看节点的状态:
kubectl get pod --all-namespaces            #查看pod的状态
#--all-namespaces #查看全部namespaces的pod
kubectl get pod --all-namespaces -o wide    #查看pod在各个node上面的分布
#-o wide #查看pod的分布情况
kubectl get deployment [nginx-deployment]                     #查看部署状态
kubectl get deployment --namespace=kube-system  #查看系统namespace中的kube-dns组件
kubectl get replicaset                  #查看部署状态
kubectl get daemonset --namespace=kube-system #查看用daemonset运行的系统组件
kubectl get node --show-labels  #查看node的label
kubectl get job --show-all #查看job任务
kubectl get cronjob  #查看cronjob任务
kubectl get namespace #查看运行中的namespace
kubectl get pv #查看pv
kubectl get pvc #查看pvc
kubectl get secret [mysecret]  #查看存在的secret
kubectl get configmap [myconfigmap] #查看存在的configmap
kubectl describe pod <Pod Name> [--namespace=kube-system] #查看pod的具体运行情况,或者启动日志
kubectl describe deployment #了解deployment的详细信息
kubectl describe replicaset #了解replicaset的详细信息
kubectl describe secret [mysecret]  #查看secret条目的key
kubectl describe configmap [myconfigmap] #查看configmap
kubectl logs pod(id) -n kube-system  #查看pod日志
kubectl logs myjob-nfkxk  #查看job执行的结果
1.1 简单命令示例
查看帮助:kubectl get -h


//查看节点的状态,查看默认空间pod的状态,获取节点信息
[root@k8s-master ~]# kubectl get pods/pod
NAME                    READY   STATUS    RESTARTS        AGE
nginx-76d6c9b8c-s85j8   1/1     Running   3 (7m44s ago)   157m

//查看所有的节点 
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES           AGE    VERSION
k8s-master   Ready    control-plane   8h     v1.25.0
k8s-node1    Ready    <none>          177m   v1.25.0
k8s-node2    Ready    <none>          176m   v1.25.0
[root@k8s-master ~]# 
 

//查看名称空间,获取命名空间列表
[root@k8s-master ~]# kubectl get ns/namespaces 
NAME              STATUS   AGE
default           Active   8h
kube-flannel      Active   7h58m
kube-node-lease   Active   8h
kube-public       Active   8h
kube-system       Active   8h
[root@k8s-master ~]# 

      
//获取【kube-system命名空间】下的pod列表,查看系统名称空间 -n指定访问的空间,查看系统namespace中的kube-dns组件       
[root@k8s-master ~]# kubectl get pods -n kube-system
NAME                                 READY   STATUS    RESTARTS      AGE
coredns-c676cc86f-44bsf              1/1     Running   3 (11m ago)   8h
coredns-c676cc86f-fbb7f              1/1     Running   3 (11m ago)   8h
etcd-k8s-master                      1/1     Running   3 (11m ago)   8h
kube-apiserver-k8s-master            1/1     Running   3 (11m ago)   8h
kube-controller-manager-k8s-master   1/1     Running   5 (11m ago)   8h
kube-proxy-65lcn                     1/1     Running   3 (11m ago)   8h
kube-proxy-lw4z2                     1/1     Running   3 (11m ago)   3h
kube-proxy-zskvf                     1/1     Running   4 (11m ago)   3h1m
kube-scheduler-k8s-master            1/1     Running   6 (11m ago)   8h
[root@k8s-master ~]# 

        
//查看rc和sercice/svc列表        
[root@k8s-master ~]# kubectl get rc,service
NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        8h
service/nginx        NodePort    10.105.183.188   <none>        80:30735/TCP   167m
[root@k8s-master ~]# 

          
// 以ps输出格式列出所有pod,并提供更多信息(如节点名称)
[root@k8s-master ~]# kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS      AGE    IP           NODE        NOMINATED NODE   READINESS GATES
nginx-76d6c9b8c-s85j8   1/1     Running   3 (21m ago)   171m   10.244.2.5   k8s-node2   <none>           <none>
[root@k8s-master ~]# 

//获取类型为Deployment(控制器)的资源列表      [root@k8s-master ~]# kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           173m
[root@k8s-master ~]#                 
2. 创建相关命令
#创建token
kubeadm token create
#获取ca证书sha256编码hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

kubectl run httpd-app --image=httpd --replicas=2 #运行俩个pod
    #httpd-app      #命名为httpd-app
    #--image=httpd  #镜像名
    #replicas=2     #启动俩个pod
    
#通过配置文件启动
kubectl apply -f nginx.yaml

kubectl apply -f httpd.v1.yml --record
  #--record  作用是将当前命令记录到revision记录中,这样就知道每个revison对应的那个配置文件。
  #可以通过kubectl rollout history deployment httpd来查看revison历史记录
#创建namespace:
kubectl create  namespace weave
  
kubectl create configmap myconfigmap --from-file=./logging.conf  #通过--from-file方式创建configmap
kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=12345  #通过--from-literal方式创建secret
2.1 创建httpd容器
[root@k8s-master ~]# kubectl create deployment apache --image=httpd
deployment.apps/apache created
[root@k8s-master ~]# kubectl expose deployment apache --port=80 --type=NodePort
service/apache exposed
[root@k8s-master ~]# kubectl get pod,svc
  NAME                         READY   STATUS              RESTARTS      AGE
pod/apache-855464645-4zxf2   0/1     ContainerCreating   0             34s
pod/nginx-76d6c9b8c-s85j8    1/1     Running             3 (38m ago)   3h8m

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/apache       NodePort    10.100.81.244    <none>        80:31552/TCP   7s
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        8h
service/nginx        NodePort    10.105.183.188   <none>        80:30735/TCP   3h7m
[root@k8s-master ~]# 
  
使用仓库镜像:  
[root@k8s-master ~]# kubectl create deployment httpd --image=xiaoyinguhong/httpd:alpine-2012.3
deployment.apps/httpd created
[root@k8s-master ~]# kubectl get deployment
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
apache   1/1     1            1           12h
httpd    0/1     1            0           20s
[root@k8s-master ~]# kubectl get pods
NAME                     READY   STATUS    RESTARTS      AGE
apache-855464645-4zxf2   1/1     Running   1 (77m ago)   12h
httpd-86f7c74499-6qmkf   1/1     Running   0             11m
[root@k8s-master ~]# kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS      AGE   IP           NODE        NOMINATED NODE   READINESS GATES
apache-855464645-4zxf2   1/1     Running   1 (77m ago)   12h   10.244.1.3   k8s-node1   <none>           <none>
httpd-86f7c74499-6qmkf   1/1     Running   0             11m   10.244.2.7   k8s-node2   <none>           <none>
[root@k8s-master ~]# kubectl get deployment
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
apache   1/1     1            1           12h
httpd    1/1     1            1           11m
[root@k8s-master ~]# 
3. 删除相关命令
kubectl delete deployment nginx-deployment  #删除deployment任务
kubectl delete -f nginx.yml   #删除deployment任务

kubectl delete pods <pod> --grace-period=0 --force  #删除pod

kubectl delete pvc mypvc1 #删除pvc中的mypvc1
4. 命令详解kubectl
[root@k8s-master ~]# kubectl -h
create 创建,从文件或stdin创建资源
expose 将复制控制器、服务、部署或吊舱作为一个新的Kubernetes服务公开        
run             在集群上运行特定镜像
set             为对象设置指定特性
explain         获取资源的文档
get             显示一个或多个资源
edit            编辑服务器上的资源
delete         按文件名、标准输入、资源和名称或按资源和标签选择器删除资源  

集群管理命令:
  certificate     修改证书资源。
  cluster-info    显示集群信息
  top             显示资源(CPU/内存)使用情况
  cordon          标记节点为不可调度
  uncordon        标记节点为可调度
  drain           清空节点以准备维护
  taint           更新一个或者多个节点上的污点

故障处理和调试命令:
  describe        显示特定资源或资源组的详细信息
  logs            打印 Pod 中容器的日志
  attach          挂接到一个运行中的容器
  exec            在某个容器中执行一个命令
  port-forward    将一个或多个本地端口转发到某个 Pod
  proxy           运行一个指向 Kubernetes API 服务器的代理
  cp              从容器中复制文件和目录
  auth            Inspect authorization
  debug           Create debugging sessions for troubleshooting workloads and nodes

    
先进的命令:
  diff           区别实际版本和潜在应用版本
  apply          通过文件名或标准输入将配置应用到资源
  patch          更新资源的字段
  replace         用文件名或标准输入替换资源
  wait            实验性:在一个或多个资源上等待特定条件
  kustomize       从目录或URL构建定制化目标。

Settings Commands:
  label           更新某资源上的标签
  annotate        更新一个资源的注解
  completion      输出指定shell (bash、zsh、fish或powershell)shell完成代码

Other Commands:
  alpha          alpha功能的命令
  api-resources  打印服务器上支持的API资源
  api-versions    在服务器上以“组/版本”的形式打印支持的API版本
  config          修改 kubeconfig 文件
  version         输出客户端和服务端的版本信息
4.1 delete,删除:
[root@k8s-master ~]# kubectl delete deployment nginx
deployment.apps "nginx" deleted
[root@k8s-master ~]# kubectl get pods
NAME                     READY   STATUS    RESTARTS      AGE
apache-855464645-4zxf2   1/1     Running   1 (23m ago)   11h
[root@k8s-master ~]# 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值