当前位置:   article > 正文

k8s-kubectl命令详解、Pod创建过程、Pod的生命周期、定制Pod、资源对象文件

k8s-kubectl命令详解、Pod创建过程、Pod的生命周期、定制Pod、资源对象文件

集群管理

一、如何管理集群

kubectl是用于管理Kubernetes集群的命令行工具

二、语法格式:

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

command:子命令,如create,get,describe,delete

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

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

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

三、集群管理命令

子命令说明
help用于查看命令及子命令的帮助信息
cluster-info显示集群的相关配置信息
version查看服务器及客户端的版本信息
api-resources查看当前服务器上所有的资源对象
api-versions查看当前服务器上所有资源对象的版本
config管理当前节点上kubeconfig的认证信息
  1. # 查看当前认证使用的用户及证书
  2. [root@master ~]# kubectl config get-contexts
  3. CURRENT NAME CLUSTER AUTHINFO
  4. * kubernetes-admin@kubernetes kubernetes kubernetes-admin
  5. # 使用 view 查看详细配置
  6. [root@master ~]# kubectl config view
  7. apiVersion: v1
  8. clusters:
  9. - cluster:
  10. certificate-authority-data: DATA+OMITTED
  11. server: https://192.168.1.50:6443
  12. name: kubernetes
  13. contexts:
  14. - context:
  15. cluster: kubernetes
  16. user: kubernetes-admin
  17. name: kubernetes-admin@kubernetes
  18. current-context: kubernetes-admin@kubernetes
  19. kind: Config
  20. preferences: {}
  21. users:
  22. - name: kubernetes-admin
  23. user:
  24. client-certificate-data: REDACTED
  25. client-key-data: REDACTED

四、管理主机授权

为其他主机添加管理权限

  1. [root@harbor ~]# vim /etc/hosts
  2. 192.168.1.30 harbor
  3. 192.168.1.50 master
  4. 192.168.1.51 node-0001
  5. 192.168.1.52 node-0002
  6. 192.168.1.53 node-0003
  7. 192.168.1.54 node-0004
  8. 192.168.1.55 node-0005
  9. # 安装集群管理工具kubectl
  10. [root@harbor ~]# yum install -y kubectl
  11. # 拷贝证书到目标主机
  12. # 证书默认路径:${HOME}/.kube/config
  13. [root@harbor ~]# mkdir -p $HOME/.kube
  14. [root@harbor ~]# rsync -av master:/etc/kubernetes/admin.conf $HOME/.kube/config
  15. # 设置证书的所有者和所属组
  16. [root@harbor ~]# chown $(id -u):$(id -g) $HOME/.kube/config
  17. # 验证管理授权
  18. [root@harbor ~]# kubectl get nodes

五、资源对象概述

什么是资源对象

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

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

如何创建资源对象

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

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

查看私有仓库中的镜像

  1. [root@master ~]# curl -sku admin https://harbor:443/v2/library/myos/tags/list | python3 -m json.tool
  2. # 也可以通过浏览器网页查看

创建Pod

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

kubectl run Pod名称 [选项/参数] --image=镜像名称:标签

  1. # 创建资源对象
  2. [root@master ~]# kubectl run myweb --image=myos:nginx
  3. pod/myweb created
  4. # 查询资源对象
  5. [root@master ~]# kubectl get pods -o wide
  6. NAME READY STATUS RESTARTS AGE IP NODE
  7. myweb 1/1 Running 0 3s 10.244.1.3 node-0001
  8. [root@master ~]# curl http://10.244.1.3
  9. Nginx is running !

六、Pod概述

  • Pod由一个或多个容器组成
  • Pod是Kubernetes中最小的管理元素
  • 同一个Pod共享网络IP及权限
  • 同一个Pod共享主机名称
  • 同一个Pod共享存储设备

Pod创建过程

为什么要使用Pod

  • 服务之间有相关性
  • 启动容器的时候需要初始化或进行相关配置

Pod的生命周期

  • Pod对象自从创建开始至终止的时间范围称为其生命周期
  • 在这段时间中,Pod处在多种不同的状态,并执行相关操作
  • 创建主容器为必需的操作,其它为可选操作(初始化容器、启动后钩子、存活性探测、就绪性探测以及终止前钩子等)

Pod相位状态

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

Pending        Pod创建过程中,但他尚未被调度成功

Running        Pod中所有容器都已经被创建成功

Completed        Pod所有容器都已经成功终止,并不会被重启

Failed        Pod中的所有容器中至少有一个容器退出是非0状态

Unknow        无法正常获取到Pod对象的状态信息

Pod管理命令

核心管理命令

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

子命令说明备注
run/create创建资源对象可输出资源文件模板
get查看资源对象的状态信息可选参数:-o 显示格式
describe查询资源对象的属性信息
logs查看容器的报错信息可选参数:-c 容器名称
kubectl get 语法格式:

kebectl get 资源对象 [资源名称] [选项/参数]

常用参数:

-o name 只显示名字

-o wide 显示更加的详细信息

-o yaml 以yaml语法格式显示资源对象

-o json 以json语法格式显示资源对象

查看命名空间
  1. [root@master ~]# kubectl get namespaces
  2. NAME STATUS AGE
  3. default Active 39h
  4. kube-node-lease Active 39h
  5. kube-public Active 39h
  6. kube-system Active 39h
查看命名空间中的资源对象
  1. [root@master ~]# kubectl -n kube-system get pods
  2. NAME READY STATUS RESTARTS AGE
  3. etcd-master 1/1 Running 0 39h
  4. kube-apiserver-master 1/1 Running 0 39h
  5. kube-controller-manager-master 1/1 Running 0 39h
  6. kube-scheduler-master 1/1 Running 0 39h
  7. ... ...
系统命名空间
  • default默认的命名空间,不声明命名空间的Pod都在这里
  • kube-node-lease为高可用提供心跳监视的命名空间
  • kube-public公共数据,所有用户都可以读取它
  • kube-system系统服务对象所使用的命名空间

k8s系统核心服务都运行在kube-system名称空间中

kubectl describe语法格式:

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

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

常用管理命令
exec在某一个容器内执行特定的命令可选参数:-c 容器名称
cp在容器和宿主机之间拷贝文件或目录

可选参数:-c 容器名称

delete删除资源对象可选参数:-f 文件名称
kubectl exec

在容器内执行命令

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

常用参数

-it 分配交互式终端

  1. # 执行非交互命令
  2. [root@master ~]# kubectl exec myweb -- ls
  3. # 执行交互命令
  4. [root@master ~]# kubectl exec -it myweb -- /bin/bash
  5. [root@myweb html]# # 这里可以交互式操作Pod了
kubectl cp

拷贝文件/目录

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

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

  1. # 与容器进行文件或目录传输
  2. [root@master ~]# kubectl cp myweb:/etc/yum.repos.d /root/aaa
  3. tar: Removing leading `/' from member names
  4. [root@master ~]# tree /root/aaa
  5. /root/aaa
  6. ├── local.repo
  7. ├── Rocky-AppStream.repo
  8. ├── Rocky-BaseOS.repo
  9. ......
  10. [root@master ~]# kubectl -n work cp /etc/passwd myhttp:/root/mima
  11. [root@master ~]# kubectl -n work exec myweb -- ls /root/
  12. mima
kubectl delete

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

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

  1. # 删除一个Pod
  2. [root@master ~]# kubectl delete pods myweb
  3. pod "myweb" deleted
  4. # 删除 work 名称空间下所有 Pod 对象
  5. [root@master ~]# kubectl -n work delete pods --all
  6. pod "myhttp" deleted
  7. # 删除名称空间
  8. [root@master ~]# kubectl delete namespaces work
  9. namespace "work" deleted

资源对象管理

一、资源对象文件

什么是资源对象

  • Kubernetes对象是“目标性记录”
  • Kubernetes使用这些对象去表示整个集群的状态

什么是资源对象文件

创建kubernetes对象时,必须提供资源对象的一些基本信息(例如:资源的对象的名字),以及描述描述描述该对象的期望状态特征(规约),如果我们在文件中使用Yaml的语法格式描述了上面的信息,这个文件就是资源对象文件

为什么要使用资源对象文件

  • 命令无法持久化,没有历史记录,不方便重现
  • 服务众多,多个容器之间有关联性,管理不方便
  • 很多高级的复杂的功能靠简单的命令方式无法实现,这些都需要使用资源文件描述

资源对象文件可以做什么

可以创建、删除、变更、管理资源对象

示例:

  1. --- # Yaml文件起始标志
  2. kind: Pod # 创建资源的类型
  3. apiVersion: v1 # 资源对应的版本
  4. metadata: # 属性信息,元数据
  5. name: myweb # 属性信息,资源的名称
  6. spec: # 资源的特性描述(规约)
  7. containers: # 容器资源特征描述
  8. - name: webserver
  9. image: myos:nginx
  10. status: {} # 资源状态,运行后自动生成

命名规范

  • 当你与指定的 API 对象进行交互时,使用大写驼峰式命名法,也被称为帕斯卡拼写法(PascalCase)
  • 不要将 API 对象的名称切分成多个单词

数组嵌套:

Json数据:

{

        "ports":

                [ {"name":"xx","Port":80}, {"name":"hh","Port":443} ]         

}

# Yaml语法格式

  1. ports:
  2. - name: xx
  3. Port: 80
  4. - name: hh
  5. Port: 443

什么是静态Pod

  • 静态Pod是由kubelet守护进程直接管理的Pod,不需要API服务器监管。与由控制面管理的POd不同
  • kubelet监视每个静态Pod(在它崩溃之后重新启动)
  • 静态Pod永远都会绑定到一个指定节点上的kubelet
  • 静态Pod的spec不能引用其它API对象
  • 静态Pod配置路径:/var/lib/kubelet/config.yaml
  • staticPodPath:/etc/kubernetes/mainfests
  1. # 创建静态Pod
  2. [root@node-0003 ~]# vim /etc/kubernetes/mainfests/myweb.yaml
  3. ---
  4. kind: Pod
  5. apiVersion: v1
  6. metadata:
  7. name: myweb
  8. spec:
  9. containers:
  10. - name: webserver
  11. image: myos:nginx
  12. # 在master查看
  13. [root@master ~]# kubectl get pods -o wide
  14. ......
  15. # 删除静态Pod
  16. 在master上使用kubectl delete pod
  17. kubelet会自动重建Pod
  18. 删除资源文件才能彻底删除Pod
  19. rm -f /etc/kubernetes/mainfests/myweb.yaml

二、管理资源对象

子命令说明备注
create创建文件中定义的资源支持指令式和资源对象文件配置
apply创建(更新)文件中定义的资源只支持资源对象文件(声明式)
delete删除文件中定义的资源可支持指令式和资源对象文件配置
  1. # 创建资源对象
  2. [root@master ~]# kubectl create -f myweb.yaml
  3. pod/myweb created
  4. # 不能更新,重复执行会报错
  5. [root@master ~]# kubectl create -f myweb.yaml
  6. Error from server (AlreadyExists): error when creating "myweb.yaml": pods "myweb" already exists
  1. # 使用资源对象文件删除
  2. [root@master ~]# kubectl delete -f myhttp.yaml
  3. pod "myhttp" deleted
  4. [root@master ~]# kubectl get pods
  5. No resources found in default namespace.
  1. # 创建资源对象
  2. [root@master ~]# kubectl apply -f myweb.yaml
  3. pod/myweb created
  4. # 更新资源对象
  5. [root@master ~]# kubectl apply -f myweb.yaml
  6. pod/myweb configured
  7. # 删除资源对象
  8. [root@master ~]# kubectl delete -f myweb.yaml
  9. pod "myweb" deleted
  10. # 拓展提高
  11. # 与 kubectl apply -f myweb.yaml 功能相同
  12. [root@master ~]# cat myweb.yaml |kubectl apply -f -
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/296050
推荐阅读
相关标签
  

闽ICP备14008679号