kubectl命令

用于控制k8s集群的命令行工具

kubectl [command] 子命令

[TYPE]资源类型

[NAME] 资源名称

[flags]指定可选标志

不区分单复数

kubectl get node/nodes -o wide #显示详细信息

命名空间

系统命名空间

default 默认的命名空间

kube-node-lease 提供心跳监视的命名空间

kube-public 公共数据

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

[root@master ~]# kubectl -n kube-system get pod #验证集群是否正常 NAME READY STATUS RESTARTS AGE coredns-f6bfd8d46-67trx 1/1 Running 1 19h coredns-f6bfd8d46-cx6j4 1/1 Running 1 19h etcd-master 1/1 Running 2 19h kube-apiserver-master 1/1 Running 2 19h kube-controller-manager-master 1/1 Running 1 19h kube-flannel-ds-amd64-27tml 1/1 Running 1 15h kube-flannel-ds-amd64-92fmd 1/1 Running 2 15h kube-flannel-ds-amd64-wxqs2 1/1 Running 1 15h kube-flannel-ds-amd64-xtcf2 1/1 Running 2 15h kube-proxy-fqxwc 1/1 Running 3 17h kube-proxy-frlsr 1/1 Running 3 17h kube-proxy-g8rh2 1/1 Running 3 17h kube-proxy-l2hdw 1/1 Running 3 19h kube-scheduler-master 1/1 Running 1 19h

常用排错命令

kubectl get 查看容器状态

kubectl describe 资源类型 资源名称

kubectl logs 查看容器报错日志 ( 看W 、E )

如果有异常

1、查看服务详细信息

2、看Events以后的内容

node节点不响应解决方法:

首先看flannel是否存在,查看kube-fannel.yml文件

k8s创建容器

1、通过资源文件管理集群

2、kubectl run 创建容器 #功能单一 ,

kubectl run 资源名称-i -t --images =私有仓库镜像名称:标签 #i,t交互式

[root@master ~]# kubectl run testos -it --image=192.168.1.100:5000/myos:v1804 #创建容器 [root@testos-6d7c98965-jprtl /]# ifconfig #查看IP,可以连外网 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450 inet 10.244.2.2 netmask 255.255.255.0 broadcast 0.0.0.0

测试

[root@testos-6d7c98965-jprtl /]# ping 192.168.1.252 PING 192.168.1.252 (192.168.1.252) 56(84) bytes of data. 64 bytes from 192.168.1.252: icmp_seq=1 ttl=63 time=1.60 ms

[root@testos-6d7c98965-jprtl /]# exit #退出,容器会关闭 会自动重启

exit

[root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE testos-6d7c98965-jprtl 1/1 Running 1 4m11s

Session ended, resume using 'kubectl attach testos-6d7c98965-jprtl -c testos -i -t' command when the pod is running [root@master ~]# ping 10.244.2.2 PING 10.244.2.2 (10.244.2.2) 56(84) bytes of data. 64 bytes from 10.244.2.2: icmp_seq=1 ttl=63 time=0.364 ms

删除资源

kubectl delete get查到的资源都能用此命令删除

k8s对容器管理机制

pod与控制器

树形结构

 

自维护

[root@master ~]# kubectl get deployments.apps #一级控制器

NAME READY UP-TO-DATE AVAILABLE AGE testos 1/1 1 1 14m

[root@master ~]# kubectl get replicasets.apps #二级控制器

NAME DESIRED CURRENT READY AGE testos-6d7c98965 1 1 1 14m

[root@master ~]# kubectl get pod #容器

NAME READY STATUS RESTARTS AGE testos-6d7c98965-jprtl 1/1 Running 1 4m11s

replicasets.apps 当容器异常,会自动重启容器

deployment.apps #删除deployment.apps,才能删除容器,默认等30秒再删除

pod原理

是k8s最小的管理元素

可以理解成多个linux命名空间的联合

pod管理资源 本质是容器 (pause)

pause 是进程 多个进程的聚合单位

容器创建过程

 

pod生命周期

pod启动过程:

启动之前首先初始化init container------>启动主pod---->触发脚本post start hook ----> 主容器运行 liveness 存活探测 readliness就绪型探测---> 结束前 备份日志 默认不做任何操作

 

pod phase

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

Pending 容器创建过程中,但尚未被调度完成

Running 所有容器都已经被kubelet创建完成

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

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

Unknown 无法正常获取到pod对象的状态信息

 

pod相位状态

第一次状态都写成pending,然后调度分配,运行成功,如果失败,重启在运行直到成功

pod特点

生命周期短暂

不会自愈 ,如果运行故障没有调度器,就会被删除

控制器提供副本管理,滚动升级,集群级别的自愈能力

kubectl exec 进入一个正在运行的容器

kubectl exec -i -t -- i--交互,t--终端

-- 含义是选项终止符,之后的内容不是选项,多个选项时使用

k8s资源文件

资源对象文件:

在RC中定义如何启动,运行,启动级副本等功能的YAML文件

用途:

创建,删除,管理资源对象

pod资源文件

kubectl api-versions #查看资源对象版本

[root@master config]# vim mypod.yaml

kind: Pod #类型

apiVersion: v1 #版本

metadata: #元数据

name: mypod #名字

spec: #详细定义

containers:              #容器定义

-name: mylinux           #容器名称

image: 192.168.1.100:5000/myos:v1804     #使用镜像

stdin: true           #相当于i,交互式

tty: true               #相当于t ,终端

[root@master ~]# kubectl apply -f mypod.yaml pod/mypod created

[root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE mypod 1/1 Running 0 11s testos-6d7c98965-jprtl 1/1 Running 1 5h7m

带控制器deploy的资源文件

pod和控制器之间靠标签关联

kubectl explain 帮助信息

规则:

大驼峰首字母大写,小驼峰首字母小写

键值对:key (小驼峰): vlaue(大驼峰)

[root@master ~]# vim myapache.yaml

kind: Deployment #当前创建资源类型

apiVersion: apps/v1 #当前格式的版本

metadata: #当前资源元数据

name: myapache #deployment的名字

annotations: kubernetes.io/change-cause: httpd.v1 spec: #当前资源的详细定义

selector: #资源匹配选择器

matchLabels: #匹配卷标

myapp: httpd #名称

replicas: 1 #pod副本数量

template: #资源模板

metadata: #元数据

labels: #标签

myapp: httpd #定义标签,在其他地方被引用

spec: #容器详细定义

containers: #容器定义

  - name: webcluster             #容器名称
    image: 192.168.1.100:5000/myos:httpd                 #镜像地址
    stdin: false        #标准输入,默认false
    tty: false         #终端,默认false
    ports:                              #定义端口
    - protocol: TCP           #服务使用协议
      containerPort: 80                 #监听端口号
        restartPolicy: Always             #重启策略

[root@master ~]# kubectl apply -f myapache.yaml deployment.apps/myapache created [root@master ~]# kubectl get deployments.apps NAME READY UP-TO-DATE AVAILABLE AGE myapache 1/1 1 1 12s testos 1/1 1 1 5h8m

kubectl run aaa -- dry-run -o yaml #假装运行,输出资源文件

集群管理

扩容与缩减

[root@master ~]# kubectl get deployments.apps #创建集群

NAME READY UP-TO-DATE AVAILABLE AGE myapache 1/1 1 1 43m testos 1/1 1 1 5h51m [root@master ~]# kubectl scale deployment myapache --replicas=3 #集群扩容 deployment.apps/myapache scaled

[root@master ~]# kubectl get deployments.apps #查看集群

NAME READY UP-TO-DATE AVAILABLE AGE myapache 2/3 3 2 43m testos 1/1 1 1 5h52m [root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE myapache-7d689bf8f-6rbgp 1/1 Running 0 44m myapache-7d689bf8f-9qqj6 1/1 Running 0 37s myapache-7d689bf8f-trgg2 1/1 Running 0 37s mypod 1/1 Running 0 45m testos-6d7c98965-jprtl 1/1 Running 1 5h52m

集群滚动和更新

重建式更新

滚动式更新

undo 回滚

history 查看历史版本

[root@master config]# kubectl rollout history deployment myapache #查看历史版本 deployment.apps/myapache REVISION CHANGE-CAUSE 1 <none>

[root@master ~]# curl http://10.244.2.4 #测试

this is apache

[root@master ~]# kubectl edit deployments.apps myapache deployment.apps/myapache edited

[root@master ~]# curl http://10.244.2.4 #测试,

Nginx this is nginx

[root@master ~]# kubectl rollout history deployment myapache deployment.apps/myapache REVISION CHANGE-CAUSE 1 <none> 2 <none>

[root@master ~]# kubectl rollout undo deployment myapache --to-revision=1 #回滚

deployment.apps/myapache rolled back

[root@master ~]# curl http://10.244.3.4 this is apache

集群调度

如果添加了选择标签,无法使用该主机,则状态一直为pending

nodeSelector标签 为目标主机打上特定标签,不同标签之间用逗号分隔

写在配置文件中用YAML格式

[root@master ~]# vim myapache.yaml #在配置文件中添加

spec: nodeName: node-0001 # 新增一行

[root@master ~]# kubectl delete -f myapache.yaml #删除myapache容器

deployment.apps "myapache" deleted

[root@master ~]# kubectl get nodes --show-labels #查看标签

[root@master ~]# vim myapache.yaml #修改配置文件

spec: nodeSelector: # 新添加 disktype: ssd # 新添加

[root@master ~]# kubectl scale deployment myapache --replicas=3 #测试

[root@master ~]# kubectl get pod -o wide #查看

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mypod 1/1 Running 0 122m 10.244.2.3 node-0003 <none> <none> testos-6d7c98965-jprtl 1/1 Running 1 7h10m 10.244.2.2 node-0003 <none> <none>

[root@master ~]# kubectl delete -f myapache.yaml

[root@master ~]# kubectl label nodes node-0002 node-0003 disktype- #删除标签

node/node-0002 labeled node/node-0003 labeled

[root@master ~]# kubectl get nodes --show-labels #查看标签

NAME STATUS ROLES AGE VERSION LABELS master Ready master 10h v1.17.6 kubernetes.io/hostname=master ... ... node-0001 Ready <none> 10h v1.17.6 kubernetes.io/hostname=node-0001 ... ... node-0002 Ready <none> 10h v1.17.6 kubernetes.io/hostname=node-0002 ... ... node-0003 Ready <none> 10h v1.17.6 kubernetes.io/hostname=node-0003 ... ...

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐