k8s-----kubectl 命令,kube-shell自动补全命令,pod伸缩scale,master可调度

文章目录

    • 1.kube-shell自动补全
  • 2. kubectl的身份认证
  • kubectl命令
    • 1. 基础命令
      • create创建(一般不用)
      • delete 删除
      • edit编辑
      • get 获取资源信息
      • describe 查看详细信息
      • logs 日志
      • exec 进入pod
      • explain 命令说明
      • run启动实例
    • 2.配置命令
      • Label 标签管理
      • apply 动态配置(重点)
    • 3. 集群管理命令
      • cluster-info/top 集群状态
      • cordon 禁止调度
      • uncordon
      • drain 驱逐pod
      • taint 反亲和性
        • 一、管理节点master(默认有污点不可调度):
      • api-resources/api-versions/version资源
      • config 客户端kube-config配置
      • scale 手动调整pod
    • autoscale 为pod自动伸缩
      • rollout回滚
    • expose 端口暴露
  • 其他常用命令

1.kube-shell自动补全

开源项目kube-shell可以为kubectl提供自动的命令提示和补全,使用起来特别方便。
Kube-shell有以下特性
命令提示,给出命令的使用说明
自动补全,列出可选命令并可以通过tab键自动补全,支持模糊搜索
高亮
使用tab键可以列出可选的对象
vim模式

安装方式
Mac下安装

apt-get update
apt-get install bash-completion
或
yum install bash-completion
#然后source一下
source <(kubectl completion bash)

或者加入

vim /etc/profile
source <(kubectl completion bash)

保存后重启终端即可生效。

2. kubectl的身份认证

Kubernetes中存在三种安全认证方式

  1. CA证书:API server与其它几个组件之间都是通过这种方式认证的
  2. HTTP base:即在API server的启动参数中指定的 --token-auth-file=/etc/kubernetes/token.csv 文件中明文的用户、组、密码和UID配置
  3. bearer token:HTTP请求中 header 中传递的Autorization:Bearer token ,这个token通常保存在创建角色
    跟 serviceaccount 绑定的时候生成的secret中。

kubectl通过读取 kubeconfig 文件中的配置信息在向API server发送请求的时候同时传递认证信息,同时支持CA证书和bearer token的认证方式,请参考使用kubeconfig文件配置跨集群认证。

kubectl命令

k8s-----kubectl 命令,kube-shell自动补全命令,pod伸缩scale,master可调度_第1张图片
kubernetes 中所有支持的类型和缩写的别名
用着条命令可以查看到

kubectl api-resources

k8s-----kubectl 命令,kube-shell自动补全命令,pod伸缩scale,master可调度_第2张图片
k8s-----kubectl 命令,kube-shell自动补全命令,pod伸缩scale,master可调度_第3张图片

1. 基础命令

# 获取节点和服务版本信息
kubectl get nodes
# 获取节点和服务版本信息,并查看附加信息
kubectl get nodes -o wide

# 获取pod信息,默认是default名称空间
kubectl get pod
# 获取pod信息,默认是default名称空间,并查看附加信息【如:pod的IP及在哪个节点运行】
kubectl get pod -o wide
# 获取指定名称空间的pod
kubectl get pod -n kube-system
# 获取指定名称空间中的指定pod
kubectl get pod -n kube-system podName
# 获取所有名称空间的pod
kubectl get pod -A 
# 查看pod的详细信息,以yaml格式或json格式显示
kubectl get pods -o yaml
kubectl get pods -o json

# 查看pod的标签信息
kubectl get pod -A --show-labels 
# 根据Selector(label query)来查询pod
kubectl get pod -A --selector="k8s-app=kube-dns"

# 查看运行pod的环境变量
kubectl exec podName env
# 查看指定pod的日志
kubectl logs -f --tail 500 -n kube-system kube-apiserver-k8s-master

# 查看所有名称空间的service信息
kubectl get svc -A
# 查看指定名称空间的service信息
kubectl get svc -n kube-system

# 查看componentstatuses信息
kubectl get cs
# 查看所有configmaps信息
kubectl get cm -A
# 查看所有serviceaccounts信息
kubectl get sa -A
# 查看所有daemonsets信息
kubectl get ds -A
# 查看所有deployments信息
kubectl get deploy -A
# 查看所有replicasets信息
kubectl get rs -A
# 查看所有statefulsets信息
kubectl get sts -A
# 查看所有jobs信息
kubectl get jobs -A
# 查看所有ingresses信息
kubectl get ing -A
# 查看有哪些名称空间
kubectl get ns

# 查看pod的描述信息
kubectl describe pod podName
kubectl describe pod -n kube-system kube-apiserver-k8s-master  
# 查看指定名称空间中指定deploy的描述信息
kubectl describe deploy -n kube-system coredns

# 查看node或pod的资源使用情况
# 需要heapster 或metrics-server支持
kubectl top node
kubectl top pod 

# 查看集群信息
kubectl cluster-info   或  kubectl cluster-info dump
# 查看各组件信息【172.16.1.110为master机器】
kubectl -s https://172.16.1.110:6443 get componentstatuses 

create创建(一般不用)

kubectl create namespace namespace-name
kubectl get namespace 

delete 删除

kubectl delete pod |service | namespace 名称
kubectl delete pod -n namespace --all 删除该namespace所有的pod

批量删除

kubectl get pod -A |grep 0/1 |awk '{print "kubectl delete pod -n"$1,$2" --grace-period=0 --force"}'

强制删除

kubectl delete po  -n  --force --grace-period=0

edit编辑

一般用于查看
动态编辑资源配置,会直接生效

kubectl get service
kubectl edit service 名称
看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
kubectl get svc
kubectl get svc -n kube-system
kubectl edit pod -n 资源Namespace  pod名称

删除pod
kubectl get pod -A |grep c87e2267-1001-4c70-bb2a-ab41f3b81aa3 |grep -v NAME |awk '{print "kubectl delete pod -n "$1,$2}'

get 获取资源信息

kubectl get node | service |namespace |pod
kubectl get pod -o
	-o json 格式
	-o yaml 格式
	-o wide 显示的更详细

-A 查看所有信息 

kubectl get pod -o wide 
kubectl get pod -A 查看一个namespace中所有pod信息

	# 列出所有 namespace 中的所有 pod
kubectl get pods --all-namespaces 

describe 查看详细信息

如果出错可以用describe

kubectl get pod -o wide 
kubectl describe pod 名称 -n default

如果还查不到
到宿主机查看系统日志

在那个宿主机
kubectl get pod -o wide 
查看日志
vim /var/log/syslog

logs 日志

kubectl get pod 

kubectl logs 

kubectl logs 名称 bash -n default 

exec 进入pod

可以进入到所有k8s的pod

kubectl get pod 
kubectl exec -it 名称 

# 进入nginx容器,执行一些命令操作
kubectl exec -it nginx-deployment-58d6d6ccb8-lc5fp bash

explain 命令说明

kubectl explain pod

kubectl explain pod.apiVersion

kubectl explain pod.kind 
  #控制器
kubectl explain deployment.spec.templete

run启动实例

启动一个 nginx 实例

kubectl run nginx --image=nginx

2.配置命令

Label 标签管理

给node标记label,实现pod与node亲和性
pod只创建在指定的node上

kubectl lable --help

	对node打
kubectl get node 
kubectl describe node 名称


kubectl lable node 名称    group-qcq

apply 动态配置(重点)

  1. create,后期不支持对资源进行修改
    后期如果修改了yaml文件相声小,那么只能删除之前的资源重新create
    kubectl delete -f file.yaml
    改yaml
    kubectl create -f file.yaml

  2. apply,支持对资源进行修改,支持回滚:历史版本记录

kubectl apply -f file.yaml

3. 集群管理命令

cluster-info/top 集群状态

kubectl top node
kubectl cluster-info

cordon 禁止调度

警戒线,标记node不被调度
也就是让master,或者业务机不跑容器
master时负责pod调度的

kubectl cordon --help

kubectl cordon 节点

然后用,查看
kubectl get node
	STATUS会出现SchedulingDisabled不参与调度2

uncordon

取消警戒标记为cordon的node

kubectl uncordon 节点

drain 驱逐pod

驱逐node上的pod,用户node下线等场景
node挂掉

kubectl get node
kubectl drain 节点
			#强制性驱逐
kubectl  drain 节点 --ignore-daemonsets --force

最后就没有pod
kubectl get node 

通常用删除该节点上的所有Pod(DaemonSet除外),在其他node上重新启动它们,直接使用该命令会自动调用 kubectl cordon 命令。当该节点维护完成,

启动了kubelet后,再使用 kubectl uncordon 即可将该节点添加到kubernetes集群中。

taint 反亲和性

给node标记污点,实现反亲pod与node反亲和性
除了标记的,其他都使用

一、管理节点master(默认有污点不可调度):

(去污点)设置可调度

kubectl taint node k8s-master node-role.kubernetes.io/master-

设置不可调度

kubectl taint node k8s-master node-role.kubernetes.io/master="":NoSchedule

二、计算节点:
设置节点不可调度:kubectl cordon
设置节点可调度:kubectl uncordon

api-resources/api-versions/version资源

kubectl version 查看版本

kubectl api-resources 查看资源信息,, 简写,kind类型

kubectl api-versions 查看api版本

config 客户端kube-config配置

kubectl config 

scale 手动调整pod

kubectl  scale deployment -n linux tomcat-app1-deployment --replicas=3 

将由“foo.yaml”配置文件中指定的资源对象和名称标识的Pod资源副本设为3。

kubectl scale --replicas=3 -f foo.yaml

如果当前副本数为2,则将其扩展至3

kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

设置多个RC中Pod副本数量。

kubectl scale --replicas=5 rc/foo rc/bar rc/baz

autoscale 为pod自动伸缩

水平自动伸缩
指定Deployment、ReplicaSet或ReplicationController,并创建已经定义好资源的自动伸缩器。使用自动伸缩器可以根据需要自动增加或减少系统中部署的pod数量。

使用 Deployment “foo”设定,使用默认的自动伸缩策略,指定目标CPU使用率,使其Pod数量在2到10之间。

kubectl autoscale deployment foo --min=2 --max=10

使用RC“foo”设定,使其Pod的数量介于1和5之间,CPU使用率维持在80%。

								 --cpu-percent=-1 默认
kubectl autoscale rc foo --max=5 --cpu-percent=80

rollout回滚

可以通过设置 .spec.revisonHistoryLimit 项来指定 deployment 最多保留多少 revision 历史记录。默认的会保留所有的 revision;如果将该项设置为 0,Deployment 就不允许回退了

# 查看(当前名字空间)所有 deployments 的历史版本
kubectl rollout history deploy  

# 查看指定 deployment 的所有历史版本
kubectl rollout history deploy <deployment-name>

# 回退(当前名字空间)所有的 deployments
kubectl rollout undo deploy  


# 回到上一个版本
kubectl rollout undo deployment/nginx-deployment

# 查看当前的更新状态
# 如果 rollout 成功完成, 该命令将返回一个 0 值的 Exit Code
kubectl rollout status deployments/nginx-deployment
# echo $?		# 输出 0

# 查看当前版本(自定义 Pod 的输出)
kubectl get pods -o custom-columns=Name:metadata.name,Image:spec.containers[0].image

# 通过该命令查看更新历史记录,Pod 模板被修改就会创建一个 revision
kubectl rollout history deployment/nginx-deploy
# 查询结果,创建 Deployment 时加上 --record 才会显示CHANGE-CAUSE
# REVISION  CHANGE-CAUSE
# 1         kubectl apply --filename=deployment.yaml --record=true
# 2         kubectl apply --filename=deployment.yaml --record=true


# 回滚到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=1

# 暂停 deployment 的更新
kubectl rollout pause deployment/nginx-deployment

expose 端口暴露

# 临时运行一个 pod/deployment
1. 创建一个 nginx pod,并同时为其创建一个 service(ClusterIp)
   	暴露出 80 端口,targetPort 默认和 port 一致
kubectl run nginx --image=nginx --expose=true  --port=80  --generator=run-pod/v1

效果等同上面 run 命令的 --expose=true  --port=80,
	只是这边的 targetPort 和 port 可以不一致
kubectl expose pod nginx --port=80 --target-port=80

其他常用命令

显示合并后的 kubeconfig 配置

kubectl config view

获取 e2e 用户的密码

kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'

显示当前的上下文

 kubectl config current-context 

设置默认上下文为 my-cluster-name

kubectl config use-context my-cluster-name 

向 kubeconf 中增加支持基本认证的新集群

kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword

使用指定的用户名和 namespace 设置上下文

kubectl config set-context gce --user=cluster-admin --namespace=foo \
&& kubectl config use-context gce
创建文件
kubectl exec test-pd -c test2-container -it -- touch /test/index.html

查看文件
kubectl exec test-pd -c test-container -it -- ls /cache
kubectl exec test-pd -c test-container -it -- cat /cache/index.html

查看pod的标签信息
kubectl get pod -A --show-labels 

根据Selector(label query)来查询pod
kubectl get pod -A --selector="k8s-app=kube-dns"

查看运行pod的环境变量
kubectl exec podName env

查看各组件信息【172.16.1.110为master机器】
kubectl -s https://172.16.1.110:6443 get componentstatuses 

你可能感兴趣的:(k8s,运维)