• 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
    
  • 相关阅读:
    九宫格拼图 支持44 55等
    js 怎样获取div 图片等的宽度,只要值,不要px
    spring boot单元测试之RestTemplate(一)
    java设计模式-原型(prototype)
    Hibernate注解(二):关联关系映射注解
    spring之@value详解二(转载)
    spring之@Value详解(转载)
    Spring之基于注解的注入
    Spring之bean生命始末
    Spring之bean后处理器
  • 原文地址:https://www.cnblogs.com/dongzhanyi123/p/13330352.html
Copyright © 2020-2023  润新知