kubeadm方式

实验环境规划:

操作系统:centos7.6

配置:16G内存/4vCPU/100硬盘

网络:云服务器

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

kubeadm 和二进制安装 k8s 适用场景分析

​ kubeadm 是官方提供的开源工具,是一个开源项目,用于快速搭建 kubernetes 集群,目前是比较方便和推荐使用的。kubeadm init 以及 kubeadm join 这两个命令可以快速创建 kubernetes 集群。Kubeadm 初始化 k8s,所有的组件都是以 pod 形式运行的,具备故障自恢复能力。

​ kubeadm 是工具,可以快速搭建集群,也就是相当于用程序脚本帮我们装好了集群,属于自动部署,简化部署操作,证书、组件资源清单文件都是自动创建的,自动部署屏蔽了很多细节,使得对各个模块感知很少,如果对 k8s 架构组件理解不深的话,遇到问题比较难排查。

​ kubeadm 适合需要经常部署 k8s,或者对自动化要求比较高的场景下使用。

​ 二进制:在官网下载相关组件的二进制包,如果手动安装,对 kubernetes 理解也会更全面。Kubeadm 和二进制都适合生产环境,在生产环境运行都很稳定,具体如何选择,可以根据实际项目进行评估。

k8s集群环境初始化

所有主机均需要执行以下操作

  1. 配置机器主机名

    k8s01:

    [root@k8s01 ~]# hostnamectl set-hostname k8s01 && bash
    

    k8s02

    [root@k8s02 ~]# hostnamectl set-hostname k8s02 && bash
    

    k8s03

    [root@k8s03 ~]# hostnamectl set-hostname k8s03 && bash
    
  2. 配置hosts文件,相互之间通过主机名互相访问

    修改每台机器的/etc/hosts文件,增加以下三行

    192.168.1.59 k8s01
    192.168.1.153 k8s02
    192.168.1.186 k8s03
    
  3. 配置主机之间无密码访问

    k8s01

    # 一路回车,不输入密码
    [root@k8s01 ~]# ssh-keygen 
    # 把本地生成的秘钥文件和私钥文件拷贝到远程主机
    [root@k8s01 ~]# ssh-copy-id k8s02
    [root@k8s01 ~]# ssh-copy-id k8s03
    

    k8s02

    # 一路回车,不输入密码
    [root@k8s02 ~]# ssh-keygen 
    # 把本地生成的秘钥文件和私钥文件拷贝到远程主机
    [root@k8s02 ~]# ssh-copy-id k8s01
    [root@k8s02 ~]# ssh-copy-id k8s03
    

    k8s03

    # 一路回车,不输入密码
    [root@k8s03 ~]# ssh-keygen 
    # 把本地生成的秘钥文件和私钥文件拷贝到远程主机
    [root@k8s03 ~]# ssh-copy-id k8s01
    [root@k8s03 ~]# ssh-copy-id k8s02
    
  4. 关闭交换分区swap,提升性能

    临时关闭

    [root@k8s01 ~]# swapoff -a
    

    永久关闭:注释swap挂载,给swap这行的开头加一下注释

    [root@k8s01 ~]# 
    #/dev/mapper/centos-swap swap swap defaults 0 0
    

    **问题1:**为什么要关闭swap交换分区

    Swap 是交换分区,如果机器内存不够,会使用 swap 分区,但是 swap 分区的性能较低,k8s 设计的时候为了能提升性能,默认是不允许使用姜欢分区的。Kubeadm 初始化的时候会检测 swap 是否关闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装 k8s 的时候可以指定–ignore-preflight-errors=Swap 来解决。

  5. 修改机器内核参数

    [root@k8s01 ~]# modprobe br_netfilter
    [root@k8s01 ~]# echo "modprobe br_netfilter" >> /etc/profile
    [root@k8s01 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF 
    net.bridge.bridge-nf-call-ip6tables = 1 
    net.bridge.bridge-nf-call-iptables = 1 
    net.ipv4.ip_forward = 1 
    EOF
    [root@k8s01 ~]# sysctl -p /etc/sysctl.d/k8s.conf
    

    问题1:sysctl是做什么的?

    在运行时配置内核参数 -p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf 中加载

    **问题2:**为什么要执行modprobe br_netfilter

    修改/etc/sysctl.d/k8s.conf 文件,增加如下三行参数:

    net.bridge.bridge-nf-call-ip6tables = 1

    net.bridge.bridge-nf-call-iptables = 1

    net.ipv4.ip_forward = 1

    sysctl -p /etc/sysctl.d/k8s.conf 出现报错:

    sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or 
    directory
    sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or 
    directory
    

    解决方法:

    modprobe br_netfilter

    **问题3:**为什么开启 net.bridge.bridge-nf-call-iptables 内核参数?

    在 centos 下安装 docker,执行 docker info 出现如下警告:

    WARNING: bridge-nf-call-iptables is disabled

    WARNING: bridge-nf-call-ip6tables is disabled

    解决办法:

    vim /etc/sysctl.d/k8s.conf

    net.bridge.bridge-nf-call-ip6tables = 1

    net.bridge.bridge-nf-call-iptables = 1

    **问题4:**为什么要开启 net.ipv4.ip_forward = 1 参数?

    kubeadm 初始化 k8s 如果报错:

    image-20240518131025814

    就表示没有开启 ip_forward,需要开启。

    net.ipv4.ip_forward 是数据包转发:

    出于安全考虑,Linux 系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的 ip 地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。要让 Linux 系统具有路由转发功能,需要配置一个 Linux 的内核参数 net.ipv4.ip_forward。这个参数指定了 Linux 系统当前对路由转发功能的支持情况;其值为 0 时表示禁止进行 IP 转发;如果是 1,则说明 IP 转发功能已经打开。

  6. 关闭firewalld防火墙

    [root@k8s01 ~]# systemctl stop firewalld
    [root@k8s01 ~]# systemctl disable firewalld
    
  7. 关闭selinux

    [root@k8s01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    

    修改 selinux 配置文件之后,重启机器,selinux 配置才能永久生效

    [root@k8s01 ~]# getenforce
    Disabled
    

    显示 Disabled 说明 selinux 已经关闭

  8. 配置安装k8s组件需要的阿里云repo源

    [root@k8s01 ~]# vim /etc/yum.repos.d/kubernetes.repo
    
    [kubernetes] 
    name=Kubernetes 
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ 
    enabled=1 
    gpgcheck=0
    

    将k8s01上的Kubernetes的repo源复制给k8s02和k8s03

    [root@k8s01 ~]# scp /etc/yum.repos.d/kubernetes.repo k8s02:/etc/yum.repos.d/
    [root@k8s01 ~]# scp /etc/yum.repos.d/kubernetes.repo k8s03:/etc/yum.repos.d/
    
  9. 配置时间同步

    在3台主机上分别执行如下:

    #安装 ntpdate 命令
    [root@k8s01 ~]# yum install ntpdate -y
    #跟网络时间做同步
    [root@k8s01 ~]# ntpdate cn.pool.ntp.org 
    #把时间同步做成计划任务
    [root@k8s01 ~]# crontab -e 
    * */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org 
    #重启 crond 服务
    [root@k8s01 ~]# service crond restart
    
  10. 开启ipvs

    #把 ipvs.modules 上传到 k8s01 机器的/etc/sysconfig/modules/目录下 
    [root@k8s01 ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs 
    
    ip_vs_ftp 13079 0 
    nf_nat 26583 1 ip_vs_ftp
    ip_vs_sed 12519 0 
    ip_vs_nq 12516 0 
    ip_vs_sh 12688 0 
    ip_vs_dh 12688 0
    

    在其他两台主机上执行相同操作

    **问题1:**ipvs 是什么?

    ipvs (IP Virtual Server) 实现了传输层负载均衡,也就是我们常说的 4 层 LAN 交换,作为 Linux内核的一部分。ipvs 运行在主机上,在真实服务器集群前充当负载均衡器。ipvs 可以将基于 TCP 和 UDP的服务请求转发到真实服务器上,并使真实服务器的服务在单个 IP 地址上显示为虚拟服务。

    **问题2:**ipvs 和 iptable 对比分析

    kube-proxy 支持 iptables 和 ipvs 两种模式, 在 kubernetes v1.8 中引入了 ipvs 模式,在v1.9 中处于 beta 阶段,在 v1.11 中已经正式可用了。iptables 模式在 v1.1 中就添加支持了,从v1.2 版本开始 iptables 就是 kube-proxy 默认的操作模式,ipvs 和 iptables 都是基于 netfilter的,但是 ipvs 采用的是 hash 表,因此当 service 数量达到一定规模时,hash 查表的速度优势就会显现出来,从而提高 service 的服务性能。那么 ipvs 模式和 iptables 模式之间有哪些差异呢?

    1、ipvs 为大型集群提供了更好的可扩展性和性能

    2、ipvs 支持比 iptables 更复杂的复制均衡算法(最小负载、最少连接、加权等等)

    3、ipvs 支持服务器健康检查和连接重试等功能

  11. 安装基础软件包

    在3台主机上分别执行以下操作:

    [root@k8s01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm
    
  12. 安装iptables

    如果用 firewalld 不习惯,可以安装 iptables ,在 k8s01、k8s02、k8s03 上操作:

    #安装 iptables
    [root@k8s01 ~]# yum install iptables-services -y
    #禁用 iptables
    [root@k8s01 ~]# service iptables stop && systemctl disable iptables
    #清空防火墙规则
    [root@k8s01 ~]# iptables -F
    

安装docker服务

所有主机都需要执行

  1. 移除旧版本

    [root@k8s01 ~]# yum remove docker*
    
  2. 设置docker yum源

    [root@k8s01 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    

    这个是Docker官方的yum源,由于国内访问国外的网站会很慢,如果发现下载很慢,建议换成国内的镜像源。

    [root@k8s01 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  3. 安装最新docker engine

    [root@k8s01 ~]# yum install -y docker-ce docker-ce-cli containerd.io
    
  4. 安装指定版本docker engine

    #找到所有可用docker版本列表
    [root@k8s01 ~]# yum list docker-ce --showduplicates | sort -r
    # 安装指定版本,用上面的版本号替换<VERSION_STRING>
    [root@k8s01 ~]# yum -y install docker-ce-3:20.10.12-3.el7.x86_64 docker-ce-cli-3:20.10.12-3.el7.x86_64 containerd.io
    #例如:
    #yum install docker-ce-3:20.10.5-3.el7.x86_64 docker-ce-cli-3:20.10.5-3.el7.x86_64 containerd.io
    #注意加上 .x86_64 大版本号
    
  5. 启动服务

    [root@k8s01 ~]# systemctl start docker
    [root@k8s01 ~]# systemctl enable docker
    
  6. 设置镜像加速

    #修改 docker 文件驱动为 systemd,默认为 cgroupfs,kubelet 默认使用 systemd,两者必须一致才可以。

    [root@k8s01 ~]# mkdir -p /etc/docker
    [root@k8s01 ~]# tee /etc/docker/daemon.json <<-'EOF'
    { 
        "registry-mirrors":[
            "https://rsbud4vc.mirror.aliyuncs.com",
            "https://registry.docker-cn.com",
            "https://docker.mirrors.ustc.edu.cn",
            "https://dockerhub.azk8s.cn",
            "http://hub-mirror.c.163.com",
            "http://qtid6917.mirror.aliyuncs.com", 
            "https://rncxm540.mirror.aliyuncs.com"
        ], 
        "exec-opts": ["native.cgroupdriver=systemd"] 
    }
    EOF
    [root@k8s01 ~]# systemctl daemon-reload
    [root@k8s01 ~]# systemctl restart docker
    

安装初始化k8s需要的软件包

所有主机都需要执行

[root@k8s01 ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 
[root@k8s01 ~]# systemctl enable kubelet 
[root@k8s01 ~]# systemctl start kubelet 
[root@k8s01 ~]# systemctl status kubelet

image-20240519114342800

上面可以看到 kubelet 状态不是 running 状态,这个是正常的,不用管,等 k8s 组件起来这个kubelet 就正常了。

注:每个软件包的作用

Kubeadm: kubeadm 是一个工具,用来初始化 k8s 集群的

kubelet: 安装在集群所有节点上,用于启动 Pod 的

kubectl: 通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

kubeadm初始化k8s集群

把初始化 k8s 集群需要的离线镜像包上传到 k8s01、k8s02、k8s03 机器上,手动解压:

[root@k8s01 ~]# docker load -i k8simage-1-20-6.tar.gz

#使用 kubeadm 初始化 k8s 集群

[root@k8s01 ~]# kubeadm init --kubernetes-version=1.20.6 --apiserver-advertise-address=192.168.1.59 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification

注:

–apiserver-advertise-address:指定apiserver地址,一般是主机Master的内网ip

–image-repository registry.aliyuncs.com/google_containers:手动指定仓库地址为registry.aliyuncs.com/google_containers。

kubeadm 默认从 k8s.grc.io 拉取镜像,但是 k8s.gcr.io访问不到,所以需要指定从 registry.aliyuncs.com/google_containers 仓库拉取镜像。

显示如下,说明安装完成:

image-20240519115235231

kubeadm join 192.168.40.180:6443 --token gsa9je.x35o1gfhd4hq26ci \ 
 --discovery-token-ca-cert-hash sha256:8c18c824fcc6f91dd03205e63005cfeef36061f86d1b14a3ee562a6eb6ad4447

#上面命令是把 node 节点加入集群,需要保存下来,每个人的都不一样

#配置 kubectl 的配置文件 config,相当于对 kubectl 进行授权,这样 kubectl 命令可以使用这个证书对 k8s 集群进行管理

[root@k8s01 ~]# mkdir -p $HOME/.kube 
[root@k8s01 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
[root@k8s01 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config 
[root@k8s01 ~]# kubectl get nodes
NAME    STATUS     ROLES                  AGE   VERSION
k8s01   NotReady   control-plane,master   84s   v1.20.6

此时集群状态还是 NotReady 状态,因为没有安装网络插件。

添加第一个工作节点

  1. 在 k8s01上查看加入节点的命令:

    [root@k8s01 ~]# kubeadm token create --print-join-command
    

    显示如下:

    kubeadm join 192.168.1.59:6443 --token tlletq.xi3be15245r40dkz     --discovery-token-ca-cert-hash sha256:f515be3a8801bdac366f09bb1a4c393db0bfd43ee0a737abec8b9a3fbd667e63
    
  2. 把 k8s02 加入 k8s 集群:

    [root@k8s02 ~]# kubeadm join 192.168.1.59:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a --ignore-preflight-errors=SystemVerification
    

    image-20240519115504573

    #看到上面说明 k8s02 节点已经加入到集群了,充当工作节点

  3. 在 k8s01 上查看集群节点状况:

    [root@k8s01 ~]# kubectl get nodes
    NAME    STATUS     ROLES                  AGE     VERSION
    k8s01   NotReady   control-plane,master   3m45s   v1.20.6
    k8s02   NotReady   <none>                 80s     v1.20.6
    

添加第二个工作节点

  1. 在 xianchaomaster1 上查看加入节点的命令:

    [root@k8s01 ~]# kubeadm token create --print-join-command
    

    显示如下:

    kubeadm join 192.168.40.180:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a
    
  2. 把 k8s03 加入 k8s 集群:

    [root@k8s03 ~]# kubeadm join 192.168.40.180:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a --ignore-preflight-errors=SystemVerification
    

    image-20240519115728465

    #看到上面说明 k8s03 节点已经加入到集群了,充当工作节点

  3. 在 k8s01 上查看集群节点状况:

    [root@k8s01 ~]# kubectl get nodes
    NAME    STATUS     ROLES                  AGE     VERSION
    k8s01   NotReady   control-plane,master   5m33s   v1.20.6
    k8s02   NotReady   <none>                 3m8s    v1.20.6
    k8s03   NotReady   <none>                 66s     v1.20.6
    

    #可以看到 k8s02、k8s03 的 ROLES 角色为空,就表示这个节点是工作节点。

    #可以把 k8s02 和k8s03 的 ROLES 变成 work,按照如下方法:

    [root@k8s02 ~]# kubectl label node k8s02 node-role.kubernetes.io/worker=worker
    [root@k8s03 ~]# kubectl label node k8s03 node-role.kubernetes.io/worker=worker
    

    注意:上面状态都是 NotReady 状态,说明没有安装网络插件

安装 k8s 网络组件-Calico

上传 calico.yaml 到 k8s01 上,使用 yaml 文件安装 calico 网络插件 。

[root@k8s01 ~]# kubectl apply -f calico.yaml

注:在线下载配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml

再次查看集群状态。

[root@k8s01 ~]# kubectl get nodes
NAME    STATUS   ROLES                  AGE     VERSION
k8s01   Ready    control-plane,master   8m5s    v1.20.6
k8s02   Ready    worker                 5m40s   v1.20.6
k8s03   Ready    worker                 3m38s   v1.20.6

[root@xianchaomaster1 ~]# kubectl get pods -n kube-system

image-20240519120114032

#STATUS 状态是 Ready,说明 k8s 集群正常运行了

k8s测试

  • 测试在 k8s 创建 pod 是否可以正常访问网络

    把 busybox-1-28.tar.gz 上传到 k8s02、k8s03 节点,手动解压

    [root@k8s02 ~]# docker load -i busybox-1-28.tar.gz 
    [root@k8s03 ~]# docker load -i busybox-1-28.tar.gz 
    [root@k8s01 ~]# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
    / # ping www.baidu.com
    PING www.baidu.com (39.156.66.18): 56 data bytes
    64 bytes from 39.156.66.18: seq=0 ttl=127 time=39.3 ms
    

    #通过上面可以看到能访问网络,说明 calico 网络插件已经被正常安装了

  • 测试 k8s 集群中部署 tomcat 服务

    把 tomcat.tar.gz 上传到 k8s02、k8s03,手动解压

    [root@k8s02 ~]# docker load -i tomcat.tar.gz 
    [root@k8s03 ~]# docker load -i tomcat.tar.gz
    [root@k8s01 ~]# kubectl apply -f tomcat.yaml
    [root@k8s01 ~]# kubectl get pods
    NAME       READY   STATUS    RESTARTS   AGE
    demo-pod   1/1     Running   0          6m1s
    [root@xianchaomaster1 ~]# kubectl apply -f tomcat-service.yaml
    [root@k8s01 ~]# kubectl get svc
    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          23m
    tomcat       NodePort    10.97.146.144   <none>        8080:30080/TCP   6m3s
    

    在浏览器访问 k8s02 节点的 ip:30080 即可请求到浏览器

  • 测试 coredns 是否正常

    [root@k8s01 ~]# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
    If you don't see a command prompt, try pressing enter.
    / # nslookup kubernetes.default.svc.cluster.local
    Server:    10.96.0.10
    Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
    
    Name:      kubernetes.default.svc.cluster.local
    Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
    

    10.96.0.10 就是我们 coreDNS 的 clusterIP,说明 coreDNS 配置好了。解析内部 Service 的名称,是通过 coreDNS 去解析的。

    #注意:

    busybox 要用指定的 1.28 版本,不能用最新版本,最新版本,nslookup 会解析不到 dns 和 ip

命令补全

​ 在使用bash命令行时,在提示符下输入某个命令的前面几个字符,然后按TAB键,就会列出以这几个字符开头的命令供我们选择。不光如此,还可以进行参数补全,但只限于文件参数,当输入到参数部分时,按TAB键,就会列出以这个参数开头的文件路径供我们选择。 现在 http://www.caliban.org/bash/ 上提供了一个名为bash-completion的软件包,通过一个复杂的脚本bash_completion实现可编程的补全程序,减少系统管理员日常维护工作,减少差错,提高工作效率。

网站:

bash-completion补全工具官网:https://caliban.org/bash/

​ 在日常管理k8s集群的时候,时刻都会使用到Kubectl 命令行工具,但是该命令还是挺复杂的,使用中也记不住那么多的api选项,所以这里介绍一下Kubectl命令补全工具(其实是Linux中bash命令自动补全工具)的安装。

安装:

[root@k8s01 ~]# yum -y install bash-completion
[root@k8s01 ~]# source /usr/share/bash-completion/bash_completion
[root@k8s01 ~]# source <(kubectl completion bash)
[root@k8s01 ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc

验证:

以下自动补全命令验证在不安装bash_completion工具时是无法实现自动补全的。

  1. Kubectl命令自动补全:

    # 按TAB键两次,提示kubectl后面可跟的命令
    [root@k8s01 rbac]# kube
    kubeadm  kubectl  kubelet  
    [root@k8s01 rbac]# kubectl 
    annotate       autoscale      cp             drain          help           plugin         scale          wait
    api-resources  certificate    create         edit           kustomize      port-forward   set            
    api-versions   cluster-info   debug          exec           label          proxy          taint          
    apply          completion     delete         explain        logs           replace        top            
    attach         config         describe       expose         options        rollout        uncordon       
    auth           cordon         diff           get            patch          run            version        
    [root@k8s01 rbac]# kubectl e
    edit     exec     explain  expose
    [root@k8s01 rbac]# kubectl exec -
    --add-dir-header            --context=                  -n                          --stderrthreshold=
    --alsologtostderr           -f                          --namespace                 --stdin
    --as                        --filename                  --namespace=                -t
    --as=                       --filename=                 --one-output                --tls-server-name
    --as-group                  -i                          --password                  --tls-server-name=
    --as-group=                 --insecure-skip-tls-verify  --password=                 --token
    -c                          --kubeconfig                --pod-running-timeout       --token=
    --cache-dir                 --kubeconfig=               --pod-running-timeout=      --tty
    --cache-dir=                --log-backtrace-at          --profile                   --user
    --certificate-authority     --log-backtrace-at=         --profile=                  --user=
    --certificate-authority=    --log-dir                   --profile-output            --username
    --client-certificate        --log-dir=                  --profile-output=           --username=
    --client-certificate=       --log-file                  --request-timeout           -v
    --client-key                --log-file=                 --request-timeout=          --v
    --client-key=               --log-file-max-size         -s                          --v=
    --cluster                   --log-file-max-size=        --server                    --vmodule
    --cluster=                  --log-flush-frequency       --server=                   --vmodule=
    --container                 --log-flush-frequency=      --skip-headers              --warnings-as-errors
    --container=                --logtostderr               --skip-log-headers          
    --context                   --match-server-version      --stderrthreshold           
    [root@k8s01 rbac]# kubectl get n
    namespaces                             networkpolicies.networking.k8s.io      nodes
    networkpolicies.crd.projectcalico.org  networksets.crd.projectcalico.org
    
  2. Linux中bash命令自动补全:

[root@k8s01 rbac]# iptables --
--append         --exact          --insert         --match          --out-interface  --rename-chain   --table
--delete         --flush          --jump           --modprobe       --policy         --replace        --verbose
--delete-chain   --fragment       --line-numbers   --new            --proto          --set-counters   --version
--destination    --in-interface   --list           --numeric        --protocol       --source         --zero
[root@k8s01 rbac]# systemctl s
set-default       set-property      show-environment  start             stop              switch-root
set-environment   show              snapshot          status            suspend           
[root@k8s01 rbac]# firewall-cmd --
--add-forward-port=                   --info-icmptype=                      --query-masquerade
--add-icmp-block=                     --info-ipset=                         --query-panic
--add-icmp-block-inversion            --info-service=                       --query-port=
--add-interface=                      --info-zone=                          --query-protocol=
--add-lockdown-whitelist-command=     --list-all                            --query-rich-rule=
--add-lockdown-whitelist-context=     --list-all-zones                      --query-service=
--add-lockdown-whitelist-uid=         --list-forward-ports                  --query-source=
--add-lockdown-whitelist-user=        --list-icmp-blocks                    --query-source-port=
--add-masquerade                      --list-interfaces                     --reload
--add-port=                           --list-lockdown-whitelist-commands    --remove-forward-port=
--add-protocol=                       --list-lockdown-whitelist-contexts    --remove-icmp-block=
--add-rich-rule=                      --list-lockdown-whitelist-uids        --remove-icmp-block-inversion
--add-service=                        --list-lockdown-whitelist-users       --remove-interface=
--add-source=                         --list-ports                          --remove-lockdown-whitelist-command=
--add-source-port=                    --list-protocols                      --remove-lockdown-whitelist-context=
--change-interface=                   --list-rich-rules                     --remove-lockdown-whitelist-uid=
--change-source=                      --list-services                       --remove-lockdown-whitelist-user=
--change-zone=                        --list-source-ports                   --remove-masquerade
--complete-reload                     --list-sources                        --remove-port=
--direct                              --lockdown-off                        --remove-protocol=
--get-active-zones                    --lockdown-on                         --remove-rich-rule=
--get-default-zone                    --panic-off                           --remove-service=
--get-description                     --panic-on                            --remove-source=
--get-helpers                         --permanent                           --remove-source-port=
--get-icmptypes                       --query-forward-port=                 --set-default-zone=
--get-ipset-types                     --query-icmp-block=                   --set-description=
--get-log-denied                      --query-icmp-block-inversion          --set-log-denied=
--get-services                        --query-interface=                    --set-short=
--get-short                           --query-lockdown                      --state
--get-zone-of-interface=              --query-lockdown-whitelist-command=   --version
--get-zones                           --query-lockdown-whitelist-context=   --zone=
--help                                --query-lockdown-whitelist-uid=       
--info-helper=                        --query-lockdown-whitelist-user=      
Logo

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

更多推荐