github.com/qsunny/k8s@v0.0.0-20220101153623-e6dca256d5bf/k8s_install/部署过程脚本.sh (about)

     1  VBoxManage internalcommands  sethduuid  "D:\soft\vm\node1\centos7-9.vdi"
     2  
     3  
     4  
     5  master  192.168.1.9
     6  node1  192.168.1.10
     7  node2  192.168.1.11
     8  
     9  # 修改 hostname
    10  hostnamectl set-hostname master01
    11  # 查看修改结果
    12  hostnamectl status
    13  # 设置 hostname 解析
    14  echo "127.0.0.1   $(hostname)" >> /etc/hosts
    15  
    16  
    17  # 只在 master 节点执行
    18  # 替换 x.x.x.x 为 master 节点实际 IP(请使用内网 IP)
    19  # export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令
    20  export MASTER_IP=192.168.1.9
    21  # 替换 apiserver.demo 为 您想要的 dnsName
    22  export APISERVER_NAME=apiserver.demo
    23  # Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
    24  export POD_SUBNET=10.100.0.1/16
    25  echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
    26  curl -sSL https://kuboard.cn/install-script/v1.21.x/init_master.sh | sh -s 1.21.0
    27  
    28  watch kubectl get pod -n kube-system -o wide
    29  kubectl get nodes -o wide
    30  ### 驱离k8s-node-1节点上的pod ###
    31  kubectl drain k8s.node1 --delete-local-data --force --ignore-daemonsets
    32  ### 删除节点 ###
    33  kubectl delete node k8s.node1
    34  kubectl get componentstatus
    35  kubectl config view
    36  # 查看名称为 “e2e” 的用户的密码
    37  $ kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'
    38  kubectl cluster-info
    39  kubectl get replicaset
    40  kubectl get node --show-labels
    41  kubectl apply -f deployment.yaml --record
    42  
    43  kubeadm config images list
    44  ### 重置节点 ###
    45  kubeadm reset
    46  # 只在 master 节点执行
    47  kubeadm token create --print-join-command
    48  # --skip-preflight-checks,可以防止每次初始化都去检查配置文件
    49  kubeadm join apiserver.demo:6443 --token 16h42d.01eem3xgw6picahg --discovery-token-ca-cert-hash sha256:ac138daa9c26e58f4d0215365cdf817fb43c438cc724a1a6fad7970d6faf0185 --skip-preflight-checks
    50  kubeadm token list
    51  kubeadm init --kubernetes-version=v1.14.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/16
    52  
    53  部署Dashboard 在master节点上执行:
    54  wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml
    55   
    56  
    57  kubectl apply -f kubernetes-dashboard.yaml
    58  kubectl get secret --all-namespaces | grep kubernetes-dashboard-admin
    59  kubectl describe secret kubernetes-dashboard-admin-token-jzmzp -n kube-system
    60  kubectl get svc --all-namespaces
    61  kubectl describe svc kubernetes-dashboard -n kubernetes-dashboard
    62  
    63  端口转发
    64  # Change mongo-75f59d57f4-4nd6q to the name of the Pod
    65  kubectl port-forward mongo-75f59d57f4-4nd6q 28015:27017
    66  kubectl port-forward pods/mongo-75f59d57f4-4nd6q 28015:27017
    67  kubectl port-forward deployment/mongo 28015:27017
    68  kubectl port-forward replicaset/mongo-75f59d57f4 28015:27017
    69  kubectl port-forward service/mongo 28015:27017
    70  
    71  https://kubernetes.io/zh/docs/tasks/access-application-cluster/service-access-application-cluster/
    72  kubectl get deployments hello-world
    73  kubectl describe deployments hello-world
    74  kubectl get replicasets
    75  kubectl describe replicasets
    76  kubectl expose deployment hello-world --type=NodePort --name=example-service
    77  kubectl describe services example-service
    78  kubectl get pods --selector="run=load-balancer-example" --output=wide
    79  kubectl delete services example-service
    80  kubectl delete deployment hello-world
    81  kubectl apply -k ./
    82  
    83  /var/lib/kubelet/config.yaml
    84  /var/lib/kubelet/kubeadm-flags.env
    85  
    86  k8s.gcr.io/kube-apiserver:v1.21.1
    87  k8s.gcr.io/kube-controller-manager:v1.21.1
    88  k8s.gcr.io/kube-scheduler:v1.21.1
    89  k8s.gcr.io/kube-proxy:v1.21.1
    90  k8s.gcr.io/pause:3.4.1
    91  k8s.gcr.io/etcd:3.4.13-0
    92  k8s.gcr.io/coredns/coredns:v1.8.0
    93  
    94  
    95  kubectl create secret docker-registry docker-regsitry-auth --docker-username=develop --docker-password=Dev888888 --docker-server=harbor.cn
    96  kubectl get deployment java-demo
    97  kubectl get pod -l app=java-demo
    98  kubectl describe pod java-demo-6cd76ccd78-8c6pp
    99  kubectl get ing java-demo
   100  
   101  https://www.pianshen.com/article/30471096773/
   102  
   103  # ingress 部署
   104  crictl pull docker.io/xzxiaoshan/nginx-ingress-controller:0.30.0
   105  # 生成证书
   106  openssl genrsa -out ingress-key.pem 2048 
   107  openssl req -new -x509 -key ingress-key.pem -out ingress.pem -subj /C=CN/ST=GuangXi/L=Nanning/O=Yunlang/OU=Yunlang/CN=www.yunlang.com
   108  # 注意这里一定要用--key和--cert方式,不建议你用--from-file方式(除非你已经很了解secret不然有可能坑的你家都不知道在哪)
   109  kubectl create secret tls ingress-secret --key ingress-key.pem --cert ingress.pem 
   110  kubectl apply -f mandatory.yaml
   111  kubectl apply -f ingress-nginx.yaml
   112  kubectl create --validate -f mypod.yaml
   113  # 下面几个命令用于查看相关组件
   114  kubectl get ingress -o wide -A
   115  kubectl get secret -o wide -A
   116  kubectl get deploy -o wide -A
   117  kubectl get svc -o wide -A
   118  kubectl get pod -o wide -A
   119  kubectl get ingress -A
   120  kubectl get pods --selector=name=nginx,type=frontend
   121  kubectl get pods --all-namespaces -l app.kubernetes.io/name=ingress-nginx --watch
   122  # 获取命名空间下所有运行中的 pod
   123  $ kubectl get pods --field-selector=status.phase=Running
   124  kubectl logs -f -n ingress-nginx   nginx-ingress-controller-57c9688cff-xtdcx
   125  kubectl exec nginx-76d945c598-bjn4h -it -- /bin/sh
   126  确认当前user信息
   127  kubectl config current-context
   128  kubectl config use-context my-cluster-name  # 设置默认的上下文为 my-cluster-name
   129  kubectl config get-contexts
   130  
   131  
   132  #卸载 要卸载kubeadm功能。
   133  kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
   134  kubectl delete node <node name>
   135  # 然后,在要删除的节点上,重置所有kubeadm安装状态:
   136  kubeadm reset
   137  
   138  # node 和集群交互
   139  kubectl cordon my-node                                                # 标记节点 my-node 为不可调度
   140  kubectl drain my-node                                                 # 准备维护时,排除节点 my-node
   141  kubectl uncordon my-node                                              # 标记节点 my-node 为可调度
   142  kubectl top node my-node                                              # 显示给定节点的度量值
   143  kubectl cluster-info                                                  # 显示 master 和 service 的地址
   144  kubectl cluster-info dump                                             # 将集群的当前状态转储到标准输出
   145  kubectl cluster-info dump --output-directory=/path/to/cluster-state   # 将集群的当前状态转储到目录 /path/to/cluster-state
   146  
   147  kubectl logs my-pod                                 # 转储 pod 日志到标准输出
   148  kubectl logs my-pod -c my-container                 # 有多个容器的情况下,转储 pod 中容器的日志到标准输出
   149  kubectl logs -f my-pod                              # pod 日志流向标准输出
   150  kubectl logs -f my-pod -c my-container              # 有多个容器的情况下,pod 中容器的日志流到标准输出
   151  kubectl run -i --tty busybox --image=busybox -- sh  # 使用交互的 shell 运行 pod
   152  kubectl attach my-pod -i                            # 关联到运行中的容器
   153  kubectl port-forward my-pod 5000:6000               # 在本地监听 5000 端口,然后转到 my-pod 的 6000 端口
   154  kubectl exec my-pod -- ls /                         # 1 个容器的情况下,在已经存在的 pod 中运行命令
   155  kubectl exec my-pod -c my-container -- ls /         # 多个容器的情况下,在已经存在的 pod 中运行命令
   156  kubectl top pod POD_NAME --containers               # 显示 pod 及其容器的度量
   157  kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090
   158  kubectl create deployment java-demo --image=yueming33990/java-demo --dry-run -o yaml > deploy.yaml
   159  kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run > svc.yaml
   160  kubectl label nodes <node-name> <label-key>=<label-value>
   161  
   162  # 查看、查找资源
   163  # 具有基本输出的 get 命令
   164  kubectl get services                          # 列出命名空间下的所有 service
   165  kubectl get pods --all-namespaces             # 列出所有命名空间下的 pod
   166  kubectl get pods -o wide                      # 列出命名空间下所有 pod,带有更详细的信息
   167  kubectl get deployment my-dep                 # 列出特定的 deployment
   168  kubectl get pods --include-uninitialized      # 列出命名空间下所有的 pod,包括未初始化的对象
   169  
   170  # 有详细输出的 describe 命令
   171  kubectl describe nodes my-node
   172  kubectl describe pods my-pod
   173  
   174  kubectl get services --sort-by=.metadata.name # List Services Sorted by Name
   175  
   176  # 根据重启次数排序,列出所有 pod
   177  kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
   178  
   179  # 查询带有标签 app=cassandra 的所有 pod,获取它们的 version 标签值
   180  kubectl get pods --selector=app=cassandra rc -o \
   181    jsonpath='{.items[*].metadata.labels.version}'
   182  
   183  # 获取命名空间下所有运行中的 pod
   184  kubectl get pods --field-selector=status.phase=Running
   185  kubectl get pods -w -l app=nginx
   186  
   187  # 所有所有节点的 ExternalIP
   188  kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
   189  
   190  # 列出输出特定 RC 的所有 pod 的名称
   191  # "jq" 命令对那些 jsonpath 看来太复杂的转换非常有用,可以在这找到:https://stedolan.github.io/jq/
   192  sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?}
   193  echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})
   194  
   195  # 检查那些节点已经 ready
   196  JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
   197   && kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
   198  
   199  # 列出某个 pod 目前在用的所有 Secret
   200  kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
   201  
   202  # 列出通过 timestamp 排序的所有 Event
   203  kubectl get events --sort-by=.metadata.creationTimestamp
   204  
   205  # 修补资源
   206  kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' # 部分更新节点
   207  # 更新容器的镜像,spec.containers[*].name 是必需的,因为它们是一个合并键
   208  kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'
   209  # 使用带有数组位置信息的 json 修补程序更新容器镜像
   210  kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'
   211  # 使用带有数组位置信息的 json 修补程序禁用 deployment 的 livenessProbe
   212  kubectl patch deployment valid-deployment  --type json   -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'
   213  # 增加新的元素到数组指定的位置中
   214  kubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]'
   215  
   216  # 更新资源
   217  kubectl rolling-update frontend-v1 -f frontend-v2.json           # 滚动更新 pod:frontend-v1
   218  kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2  # 变更资源的名称并更新镜像
   219  kubectl rolling-update frontend --image=image:v2                 # 更新 pod 的镜像
   220  kubectl rolling-update frontend-v1 frontend-v2 --rollback        # 中止进行中的过程
   221  cat pod.json | kubectl replace -f -                              # 根据传入标准输入的 JSON 替换一个 pod
   222  
   223  # 强制替换,先删除,然后再重建资源。会导致服务中断。
   224  kubectl replace --force -f ./pod.json
   225  
   226  # 为副本控制器(rc)创建服务,它开放 80 端口,并连接到容器的 8080 端口
   227  kubectl expose rc nginx --port=80 --target-port=8000
   228  
   229  # 更新单容器的 pod,将其镜像版本(tag)更新到 v4
   230  kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
   231  
   232  kubectl label pods my-pod new-label=awesome                      # 增加标签
   233  kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq       # 增加注释
   234  kubectl autoscale deployment foo --min=2 --max=10                # 将名称为 foo 的 deployment 设置为自动扩缩容
   235  
   236  # 删除资源
   237  kubectl delete -f ./pod.json                                              # 使用 pod.json 中指定的类型和名称删除 pod
   238  kubectl delete pod,service baz foo                                        # 删除名称为 "baz" 和 "foo" 的 pod 和 service
   239  kubectl delete pods,services -l name=myLabel                              # 删除带有标签 name=myLabel 的 pod 和 service
   240  kubectl delete pods,services -l name=myLabel --include-uninitialized      # 删除带有标签 name=myLabel 的 pod 和 service,包括未初始化的对象
   241  kubectl -n my-ns delete po,svc --all       
   242  
   243  # 缩放资源
   244  kubectl scale --replicas=3 rs/foo                                 # 缩放名称为 'foo' 的 replicaset,调整其副本数为 3
   245  kubectl scale --replicas=3 -f foo.yaml                            # 缩放在 "foo.yaml" 中指定的资源,调整其副本数为 3
   246  kubectl scale --current-replicas=2 --replicas=3 deployment/mysql  # 如果名称为 mysql 的 deployment 目前规模为 2,将其规模调整为 3
   247  kubectl scale --replicas=5 rc/foo rc/bar rc/baz                   # 缩放多个副本控制器
   248  
   249  # 编辑资源
   250  kubectl edit svc/docker-registry                      # 编辑名称为 docker-registry 的 service
   251  KUBE_EDITOR="nano" kubectl edit svc/docker-registry   # 使用 alternative 编辑器
   252  
   253  # 如果带有该键和效果的污点已经存在,则将按指定的方式替换其值
   254  kubectl taint nodes foo dedicated=special-user:NoSchedule
   255  
   256  # 应用滚动升级
   257  kubectl apply -f springboot-example-deployment.yaml
   258  kubectl get pod -l app=java-demo -w
   259  kubectl rollout history deployment/java-demo  #查看应用历史版本
   260  kubectl rollout undo deployment/java-demo   #回滚到之前的版本
   261  kubectl rollout undo deployment/java-demo --to-revision=1   #回到指定的历史版本
   262  kubectl rollout status deploy/java-demo    #查看发布情况
   263  
   264  # 更新资源
   265  kubectl rolling-update frontend-v1 -f frontend-v2.json           # 滚动更新 pod:frontend-v1
   266  kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2  # 变更资源的名称并更新镜像
   267  kubectl rolling-update frontend --image=image:v2                 # 更新 pod 的镜像
   268  kubectl rolling-update frontend-v1 frontend-v2 --rollback        # 中止进行中的过程
   269  cat pod.json | kubectl replace -f -                              # 根据传入标准输入的 JSON 替换一个 pod
   270  
   271  # 强制替换,先删除,然后再重建资源。会导致服务中断。
   272  kubectl replace --force -f ./pod.json
   273  
   274  # 为副本控制器(rc)创建服务,它开放 80 端口,并连接到容器的 8080 端口
   275  kubectl expose rc nginx --port=80 --target-port=8000
   276  
   277  # 更新单容器的 pod,将其镜像版本(tag)更新到 v4
   278  kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
   279  
   280  kubectl label pods my-pod new-label=awesome                      # 增加标签
   281  kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq       # 增加注释
   282  kubectl autoscale deployment foo --min=2 --max=10                # 将名称为 foo 的 deployment 设置为自动扩缩容
   283  
   284  kubectl get ingress
   285  kubectl describe svc/mysql
   286  kubectl describe endpoints/mysql
   287  #手动创建无头服务及endpoint,引入外部数据库,然后通过k8s集群中的域名解析服务访问,访问的主机名格式为:[svc_name].[namespace_name].svc.cluster.local。
   288  
   289  # Kubernetes 基础对象清理
   290  kubectl get pods --all-namespaces -o wide | grep Evicted | awk '{print $1,$2}' | xargs -L1 kubectl delete pod -n
   291  kubectl get pods --all-namespaces -o wide | grep Error | awk '{print $1,$2}' | xargs -L1 kubectl delete pod -n
   292  kubectl get pods --all-namespaces -o wide | grep Completed | awk '{print $1,$2}' | xargs -L1 kubectl delete pod -n
   293  # 清理没有被使用的 PV
   294  kubectl describe -A pvc | grep -E "^Name:.*$|^Namespace:.*$|^Used By:.*$" | grep -B 2 "<none>" | grep -E "^Name:.*$|^Namespace:.*$" | cut -f2 -d: | paste -d " " - - | xargs -n2 bash -c 'kubectl -n ${1} delete pvc ${0}'
   295  # 清理没有被绑定的 PVC
   296  kubectl get pvc --all-namespaces | tail -n +2 | grep -v Bound | awk '{print $1,$2}' | xargs -L1 kubectl delete pvc -n
   297  
   298  # 隔离你的集群中除 4 个节点以外的所有节点
   299  kubectl cordon <node-name>
   300  kubectl get pdb zk-pdb
   301  # 使用 kubectl drain 来隔离和腾空 zk-0 Pod 调度所在的节点。
   302  kubectl drain $(kubectl get pod zk-0 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-emptydir-data
   303  # 使用 kubectl uncordon 来取消对第一个节点的隔离。
   304  kubectl uncordon kubernetes-node-pb41
   305  
   306  # kubectl scale 扩展副本数为 5
   307  kubectl scale sts web --replicas=5
   308  # 将 StatefulSet 缩容回三个副本
   309  kubectl patch sts web -p '{"spec":{"replicas":3}}'
   310  # Patch web StatefulSet 来执行 RollingUpdate 更新策略
   311  kubectl patch statefulset web -p '{"spec":{"updateStrategy":{"type":"RollingUpdate"}}}'
   312  # StatefulSet 来再次的改变容器镜像
   313  kubectl patch statefulset web --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"gcr.io/google_containers/nginx-slim:0.8"}]'
   314  # 获取 Pod 来查看他们的容器镜像
   315  for p in 0 1 2; do kubectl get pod "web-$p" --template '{{range $i, $c := .spec.containers}}{{$c.image}}{{end}}'; echo; done
   316  你还可以使用 kubectl rollout status sts/<name> 来查看 rolling update 的状态
   317  # 使用 RollingUpdate 更新策略的 partition 参数来分段更新一个 StatefulSet
   318  kubectl patch statefulset web -p '{"spec":{"updateStrategy":{"type":"RollingUpdate","rollingUpdate":{"partition":3}}}}'
   319  kubectl patch statefulset web --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"k8s.gcr.io/nginx-slim:0.7"}]'
   320  # 非级联删除 --cascade=orphan 只删除 StatefulSet 而不要删除它的任何 Pod
   321  kubectl delete statefulset web --cascade=orphan
   322  # 级联删除 
   323  kubectl delete statefulset web
   324  # sts is an abbreviation for statefulset
   325  kubectl delete sts web
   326  
   327  
   328  # configmap
   329  kubectl create configmap game-config-2 --from-file=game.properties --from-file=ui.properties
   330  kubectl describe cm game-config-2
   331  kubectl get pod/redis configmap/example-redis-config 
   332  
   333  # https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/baremetal/deploy.yaml
   334  # 云服务商 https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml
   335  使用下面的命令查看 webhook
   336  kubectl get validatingwebhookconfigurations
   337  kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
   338  
   339  # 调试问题 
   340  kubectl run -it --rm --restart=Never busybox-test --image=busybox sh
   341  kubectl get pods -l app=java-demo \
   342      -o go-template='{{range .items}}{{.status.podIP}}{{"\n"}}{{end}}'
   343  for ep in 10.244.2.49:8080 10.244.1.58:8080 10.244.2.48:8080; do
   344      wget -qO- $ep
   345  done
   346  
   347  # 搭建NFS服务
   348  # 服务器端防火墙开放111、662、875、892、2049的 tcp / udp 允许,否则远端客户无法连接
   349  netstat -tnal |grep 111、662、875、892、2049
   350  firewall-cmd --zone=public --add-port=892/tcp --permanent
   351  firewall-cmd --zone=public --add-port=892/udp --permanent
   352  firewall-cmd --reload
   353  firewall-cmd --list-port
   354   # 安装nfs
   355  yum install -y nfs-utils
   356  # 创建nfs目录
   357  mkdir -p /nfs/data/
   358  mkdir -p /nfs/data/mysql
   359  # 授予权限
   360  chmod -R 777 /nfs/data
   361  # 编辑export文件
   362  vi /etc/exports
   363    /nfs/data *(insecure,rw,no_root_squash,sync)
   364  # 使得配置生效
   365  exportfs -r
   366  # 查看生效
   367  exportfs
   368  # 启动rpcbind、nfs服务
   369  systemctl restart rpcbind && systemctl enable rpcbind
   370  systemctl start nfs-server && systemctl enable nfs-server
   371  # 查看rpc服务的注册情况
   372  rpcinfo -p localhost
   373  # showmount测试
   374  showmount -e 192.168.1.5
   375  # 报错rpc mount export: RPC: Unable to receive; errno = No route to host
   376  firewall-cmd --add-service=nfs --permanent
   377  firewall-cmd --add-service=rpc-bind --permanent
   378  firewall-cmd --add-service=mountd --permanent
   379  
   380  
   381  # 客户端安装
   382  yum -y install nfs-utils
   383  systemctl start nfs && systemctl enable nfs 
   384  # 执行以下命令检查 nfs 服务器端是否有设置共享目录
   385  showmount -e 192.168.1.5
   386  # 挂载目录到本机
   387  mkdir -p /nfs/nfsmount
   388  # mount -t nfs $(nfs服务器的IP):/root/nfs_root /root/nfsmount
   389  mount -t nfs 192.168.1.5:/nfs/data /nfs/nfsmount
   390  # 写入一个测试文件
   391  echo "hello nfs server" > /nfs/nfsmount/test.txt
   392  
   393  
   394  # 下载并安装sealos, sealos是个golang的二进制工具,直接下载拷贝到bin目录即可, release页面也可下载
   395  $ wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos && \
   396      chmod +x sealos && mv sealos /usr/bin 
   397  
   398  # 下载离线资源包
   399  $ wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/2fb10b1396f8c6674355fcc14a8cda7c-v1.20.0/kube1.20.0.tar.gz
   400  
   401  # 安装一个三master的kubernetes集群
   402  $ sealos init --passwd 'qiujiabao' \
   403  	--master 192.168.56.101 \
   404  	--node 192.168.56.102 --node 192.168.56.103 \
   405  	--pkg-url /data/k8s/install/kube1.20.0.tar.gz \
   406  	--version v1.20.0
   407  
   408  
   409  sudo mkdir -p /etc/docker
   410  sudo tee /etc/docker/daemon.json <<-'EOF'
   411  {
   412    "registry-mirrors": ["https://6ikg7eqs.mirror.aliyuncs.com"]
   413  }
   414  EOF
   415  systemctl daemon-reload && systemctl restart docker
   416  
   417  
   418  https://github.com/chinaboy007/kube-prometheus