k8s-命令使用

kubeadm命令使用

kubeadm alpha              #kubeadm 处于测试阶段的命令

kubeadm completion bash    #bash 命令补全,需要安装 bash-completion

kubeadm config             #管理 kubeadm 集群的配置,该配置保留在集群的 ConfigMap 中(配置文件)

kubeadm config print init-defaults   #kubeadm默认初始化所执行的操作,可以通过此命令将初始化配置导入到一个文件中,通过这个文件进行master初始化

kubeadm help    
kubeadm init     #启动一个 Kubernetes 主节点
kubeadm join     #将节点加入到已经存在的 k8s master,包括master及node节点

kubeadm reset    
#还原使用 kubeadm init 或者 kubeadm join 对系统产生的环境变化;当在一个节点执行kubeadm join,把节点加入到master上,会在当前节点产生一些数据;kubeadm reset 用于清空kubeadm init 或者 kubeadm join所产生的数据,在哪个节点执行,相当于把哪个节点的初始化数据或者加入到master所产生的数据都删除,从而把该节点从k8s集群中剔除,把一个节点从k8s集群删除时,会从etcd中把该节点的数据删除,并且会把这个节点本机上添加到master时所产生的数据也清空
 
kubeadm token    
#管理kubeadm产生的token;如果访问k8s的API,要么使用账号密码,要么使用token;第一次访问k8s的API,认证通过后会返还一个token,下次再访问API使用token认证即可,但是token有有效期

kubeadm upgrade  #升级 k8s 版本
kubeadm version  #查看版本信息

kubeadm token list   #列出所有token
	create   #创建 token,默认有效期 24 小时;当token到期后,还想把node节点加入集群,则需要在master节点使用创建token的命令,创建一个新的token,node节点使用master新创建出的token作为认证
 	delete   #删除 token
 	generate #生成并打印 token,但不在服务器上创建,即将 token 用于其他操作

kubeadm init 命令简介

https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm/ #命令使用

https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/ #集群初始化

在三台 master 中任意一台 master 进行集群初始化,而且集群初始化只需要初始化一次。初始化信息会存放到etcd中,master是不存放任何数据的,如果在多台master执行kubeadm init初始化,则可能会造成集群初始化失败,或者k8s集群初始化后,使用不了
root@test:~# kubeadm init --help
--apiserver-advertise-address string     #K8S API Server 将要监听的本机 IP

--apiserver-bind-port int32              #API Server 绑定的端口,默认为 6443,端口类型为整数

--apiserver-cert-extra-sans stringSlice  #可选的证书额外信息,用于指定 API Server 的服务器证书。可以是 IP 地址也可以是 DNS 名称。

--cert-dir string                        #证书的存储路径,缺省路径为 /etc/kubernetes/pki

--certificate-key string                 #定义一个用于加密 kubeadm-certs Secret 中的控制平台证书的密钥

--config string    #kubeadm配置文件的路径,不用配,保持默认即可,会在当前用户的家目录生成;配置文件的作用是kubectl连接apiserver的重要凭据,控制端容器也会生成配置文件

--control-plane-endpoint string
#为控制平台指定一个稳定的 IP 地址或 DNS 名称,即配置一个可以长期使用且是高可用的 VIP 或者域名,k8s 多 master 高可用基于此参数实现,--apiserver-advertise-address 此参数指定的是本机的apiserver的监听地址,所以--control-plane-endpoint参数给master提供了一个稳定的地址,这个地址不管到master集群的哪个master节点上,都是不变的,一般为haproxy的VIP,使用VIP对k8s的控制端进行统一访问和调度

--cri-socket string 
#要连接的 CRI(容器运行时接口,Container Runtime Interface, 简称 CRI)套接字的路径,如果为空,则 kubeadm 将尝试自动检测此值,"仅当安装了多个CRI(即多个公司开发的容器)或具有非标准 CRI 插槽时,才使用此选项"

--dry-run                         #不要应用任何更改,只是输出将要执行的操作,其实就是测试运行。

--experimental-kustomize string   #用于存储 kustomize 为静态 pod 清单所提供的补丁的路径。

--feature-gates string            #一组用来描述各种功能特性的键值(key=value)对,选项是:IPv6DualStack=true|false (ALPHA - default=false)

--ignore-preflight-errors strings 
#k8s在初始化时,会对系统进行各种检查,可以忽略检查过程中出现的错误信息,比如忽略 swap,如果为 all 就忽略所有;如果有交换分区,可以使用此参数忽略交换分区的检查

--image-repository string      
#设置一个镜像仓库,默认为 k8s.gcr.io;kubeadm在初始master时,会下载一些镜像,包括k8s管理端所需要的三个核心组件的镜像及其他镜像,该镜像仓库是google的,无法访问,需要换成国内镜像仓库, registry.cn-hangzhou.aliyuncs.com/google_containers/

--kubernetes-version string      #指定安装 k8s 版本,默认为 stable-1

--node-name string               #指定 node 节点名称;node节点或master添加到k8s集群后,通过主机名区分各个节点,所以需要确保主机名在k8s集群中的唯一性

--pod-network-cidr               #设置 pod ip 地址范围;指定给容器使用的IP地址段,确保k8s集群中的三个网络不能冲突

--service-cidr                   #设置 service 网络地址范围

--service-dns-domain string      #设置 k8s 内部域名,默认为 cluster.local,会有相应的 DNS 服务(kube-dns/coredns)解析生成的域名记录。需要指定一个新的service域名的后缀

--skip-certificate-key-print     #不打印用于加密的 key 信息

--skip-phases strings            #要跳过哪些阶段

--skip-token-print               #跳过打印 token 信息;此选项不指定,需要通过token才能把node节点添加到master

--token                          #指定 token;设置固定token

--token-ttl                      #指定 token 生命周期,默认为 24 小时,0 为永不过期

--upload-certs                   #更新证书

#全局可选项:
--add-dir-header          #如果为 true,在日志头部添加日志目录
--log-file string         #设置日志名称
--log-file-max-size uint  #设置日志文件的最大大小,单位为兆,默认为 1800 兆,0 为没有限制
--rootfs                  #给日志设置宿主机的根路径,也就是绝对路径;不指定默认记录在/var/log/syslog
--skip-headers            #如果为 true,在 log 日志里面不显示标题前缀
--skip-log-headers        #如果为 true,在 log 日志里里不显示标题

kubectl命令使用

Kubectl是用于控制Kubernetes集群的命令行工具。kubectl在$HOME/.kube目录中查找名为config的文件。可以通过设置KUBECONFIG环境变量或设置标志来指定其他kubeconfig文件--kubeconfig。

k8s集群中,基于namespace将各个业务的pod进行隔离

对k8s集群资源对象的增删改查

kubectl create namespace xxx
#创建一个namespace,也可以使用-f的方式,指定一个yml文件进行资源对象的创建,也可以从网上下载构建;已被kubectl apply 替代

kubectl delete namespace xxx
#删除指定名称的namespace

kubectl edit service service_name
#动态编辑一个资源对象,可以是service、pod等;编辑一个service,改完后立即生效

kubectl get 资源对象 
#查看指定资源对象的状态信息;如service、pod、secret(秘钥)、namespace、node、csr(列出所有节点加入集群的申请请求)等;配合 -o wide,显示详细信息;配合 -A,列出k8s集群中所有指定的资源对象 

kubectl describe 资源对象 对象名称 -n namespace_name
#查看指定对象的详细信息,指定对象名称,以及所属的namespace名称,如果不指定namespace,默认查看的是default;如果查看pod的详细信息,发现pod无法创建,需要到Pod所在的宿主机查看系统日志;k8s的日志默认都是存放在系统日志中

kubectl logs -f pod_name
#查看一个pod的日志

kubectl exec -it pod_name bash -n namespace_name
#可以进入到k8s集群中任何一个node节点的容器中,而docker exec只能进入到本机的容器中

kubectl explain deployment
#查看在yml文件中,资源对象的使用方法

kubectl explain deployment.apiVersion
#查看一个对象下apiversion,在yml文件中的配置方法,yml文件有严格的上下级关系

kubectl exec -it pod_name -c container_name bash -n namespace_name
#进入指定pod中的指定容器中;如果不指定容器名称,则默认进入pod中的第一个容器中

kubectl create serviceaccount user_name -n namespace_name
#创建一个用户,指定该用户所属的namespace

kubectl get serviceaccount -A
#查看当前k8s集群中,所有用户

kubectl get role -n namespace_name
#查看指定namespace下的role


实例:
kubectl get nodes     #列出集群中所有节点的信息,可以加-o wide,更详细的显示

kubectl get csr       #列出所有的申请请求的状态(节点加入集群的申请请求)

kubectl get pod -A    #查看当前k8s集群中所有namespaces下的pod

kubectl get pod -n namespace_name  #查看指定namespace中pod的信息

kubectl get pod -A -o wide   #显示更详细的结果

kubectl get service   #列出所有的service,可以加-o wide,更详细的显示

kubectl describe service service_name  
#查看某个service的更详细的信息;describe可以查看对象的详细信息

kubectl run net-test1 --image=alpine --replicas=3 sleep 360000   
#通过kubectl命令创建3个容器在不同的node节点上,进行测试

kubectl delete -f kube-flannel.yml    
#删除指定yml文件的所有容器,并且pod被删除后,不会在自动创建

kubectl delete pod pod_name -n namespace_name   
#删除指定namespace中的pod,删除完之后,会自动重建 

kubectl get deployment -n namespace_name
#查看指定namespace下的所有deployment类型的控制器

kubectl delete deployment deployment_name -n namespace_name
#删除指定namespace下的指定名称的deployment控制器;并且控制器所管理的pod也将全部被删除,并且不会自动创建

kubectl get secret -A     #查看k8s集群所有的秘钥

kubectl describe secret token_name -n namespace_name  
#查看指定namespace里的指定token的详细信息

kubectl describe service service_name   #查看指定service的详细信息

kubectl get ep -n namespace_name
#列出指定namespace中所有service与endpoint的对应关系

kubectl get hpa -n namespace_name
#查看指定namespace中的hpa控制器

kubectl get pv                     #查看pv状态

kubectl get pvc -n namespace_name  #查看指定namespace下的pvc状态

修改coredns数量

coredns组件是没有yml文件的,需要执行以下步骤才可修改coredns数量

1、kubectl get deployment -A    #查看所有deployment,以及所属namespace

2、kubectl edit deployment coredns -n kube-system
#找到coredns的deployment后,编辑coredns的deployment控制器,指定控制器名称以及所属namespace,保存退出后立即生效

配置命令

kubectl label node node1 group=linux-test1
#给节点名为node1的node节点打个 group=linux-test1 的标签,以实现pod和node的亲和性,后期让pod创建在指定标签的node节点上;资源对象除了node还可以指定pod

kubectl apply -f file_name.yml     
#根据yml文件,创建资源对象,如果yml文件不在本地,可以指定URL,会自动总网上下载下来,然后构建;通过apply指定yml文件,从而创建pod,并且apply已经把create替代;
apply的优势在于支持对yml文件的多次修改和动态生效、历史回滚,即修改完yml文件后,再次执行 kubectl apply -f file_name.yml,就会把yml文件发生变化的部分进行构建,但是create不行;
create只支持单次创建yml文件的资源,后期修改了yml文件想生效,需要先执行 kubectl delete -f file_name.yml,删除已经构建好的pod,然后再执行 kubectl create -f file_name.yml;
必须是删除原有的pod后,再执行create,如果是先修改了 yml 文件,在删除,则会可能找不到pod或者删除别的pod,因为执行delete的时候,是以现有 yml 文件内容为准,所以必须先删除现有 pod,在修改 yml 文件

集群管理命令

kubectl top
#查看集群运行状态;可以指定node、pod等对象进行指标收集;需要安装好 Metrics 服务才能收集node节点的指标数据

kubectl cluster-info
#查看k8s集群中服务的访问方式

kubectl cordon node_name
#创建pod时,被指定的节点将不会被scheduler进行调度

kubectl uncordon node_name
#取消警戒标记为cordon的node

kubectl drain node_name
#驱逐node上的pod(驱逐的是无状态服务,核心pod是不会被驱逐的)到其他节点上,用户node下线等场景

kubectl taint node_name
#给node标记污点,实现pod与node反亲和性,pod不创建在有这个label标记的node节点上

kubectl version
#查看kubectl命令版本,也可以看到 go 的版本

kubectl api-resources
#查看k8s的API的所有资源对象

kubectl api-versions
#查看各个api分组的api版本

kubectl top node
#查看k8s集群中每个node节点的内存、CPU使用情况;需要k8s集群提前安装好metrics-server

kubectl top pod -n namespace_name
#查看指定namespace下的pod的资源使用情况;需要k8s集群提前安装好metrics-server
原文地址:https://www.cnblogs.com/dongzhanyi123/p/13330352.html