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