02 kubernetes的安裝

備注:關于本人kubernets相關文檔目前都是基于陽明老師的k8s訓練營課程學習所得,與陽明老師的文檔大部分都相同车荔,但是個人文檔也完全是一步一步實操驗證過的,部分內(nèi)容略有添加。

陽明老師博客地址:https://www.qikqiak.com/post/promotion-51/闽坡。如有需要自行查閱舶斧。

在安裝k8s之前先來復習下ipvs相關內(nèi)容

ipvs (IP Virtual Server) 實現(xiàn)了傳輸層負載均衡负芋,也就是我們常說的4層LAN交換消别,作為 Linux 內(nèi)核的一部分。ipvs運行在主機上低淡,在真實服務器集群前充當負載均衡器姓言。ipvs可以將基于TCP和UDP的服務請求轉(zhuǎn)發(fā)到真實服務器上,并使真實服務器的服務在單個 IP 地址上顯示為虛擬服務蔗蹋。

ipvs VS iptables
我們知道kube-proxy支持 iptables 和 ipvs 兩種模式何荚, 在kubernetes v1.8 中引入了 ipvs 模式,在 v1.9 中處于 beta 階段猪杭,在 v1.11 中已經(jīng)正式可用了餐塘。iptables 模式在 v1.1 中就添加支持了,從 v1.2 版本開始 iptables 就是 kube-proxy 默認的操作模式皂吮,ipvs 和 iptables 都是基于netfilter的戒傻,那么 ipvs 模式和 iptables 模式之間有哪些差異呢?

ipvs 為大型集群提供了更好的可擴展性和性能
ipvs 支持比 iptables 更復雜的復制均衡算法(最小負載蜂筹、最少連接需纳、加權等等)
ipvs 支持服務器健康檢查和連接重試等功能

環(huán)境準備

3個節(jié)點,都是centos7.6系統(tǒng)艺挪,內(nèi)核版本3.10.0-957.21.3.el7.x86_64不翩。在每個節(jié)點上添加hosts信息。

172.17.122.150  master
172.17.122.151  node01
172.17.122.152  node02

節(jié)點的 hostname 必須使用標準的 DNS 命名麻裳,另外千萬不用什么默認的 localhost 的 hostname口蝠,會導致各種錯誤出現(xiàn)的。在 Kubernetes 項目里津坑,機器的名字以及一切存儲在 Etcd 中的 API 對象妙蔗,都必須使用標準的 DNS 命名(RFC 1123)〗澹可以使用命令 hostnamectl set-hostname ydzs-node1 來修改 hostname眉反。

  • 禁用防火墻和SELinux狞谱。如果是阿里云服務器的話則默認都是禁用的。

由于要開啟內(nèi)核ipv4轉(zhuǎn)發(fā)所以需要加載br_netfilter模塊禁漓,所以加載下此模塊:
modprobe br_netfilter
創(chuàng)建/etc/sysctl.d/k8s.conf文件,添加如下內(nèi)容:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
bridege-nf
bridge-nf 使得 netfilter 可以對 Linux 網(wǎng)橋上的 IPv4/ARP/IPv6 包過濾孵睬。比如播歼,設置net.bridge.bridge-nf-call-iptables=1后,二層的網(wǎng)橋在轉(zhuǎn)發(fā)包時也會被 iptables的 FORWARD 規(guī)則所過濾掰读。常用的選項包括:

    net.bridge.bridge-nf-call-arptables:是否在 arptables 的 FORWARD 中過濾網(wǎng)橋的 ARP 包
    net.bridge.bridge-nf-call-ip6tables:是否在 ip6tables 鏈中過濾 IPv6 包
    net.bridge.bridge-nf-call-iptables:是否在 iptables 鏈中過濾 IPv4 包
    net.bridge.bridge-nf-filter-vlan-tagged:是否在 iptables/arptables 中過濾打了 vlan 標簽的包秘狞。

執(zhí)行如下命令使修改生效:
sysctl -p /etc/sysctl.d/k8s.conf

安裝ipvs:

$ cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
$ chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

上面的腳本創(chuàng)建了的/etc/sysconfig/modules/ipvs.modules文件,保證在節(jié)點重啟后能自動加載所需模塊蹈集。使用lsmod|grep - e iv_vs -e nf_conntrack_ipv4命令查看是否依舊正確加載所需的內(nèi)核模塊烁试。

接下來還需要確保各個節(jié)點上已經(jīng)安裝了ipset軟件包:
yum install ipset
為了方便查看ipvs的代理規(guī)則,最好安裝一下管理工具ipvsadm:
yum install ipvsadm

同步服務器時間拢肆,阿里云服務器同區(qū)域時間都是同步的减响。無需再操作。如有需要可以使用chrony來配置郭怪。

關閉swap分區(qū):
swapoff -a

接下來就可以安裝Docker了
[root@master ~]# yum install -y yum-utils device-mapper-persistent-data

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

[root@master ~]# yum list docker-ce --showduplicates|sort -r  #可以選擇一個版本進行安裝支示,比如我這里就安裝最新版本

[root@master ~]# yum install docker-ce-18.09.9 -y

配置docker鏡像加速器:

# daemon.json可能不存在,那么我們需要自己創(chuàng)建
[root@master docker]# cd /etc/docker && cat daemon.json
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": [
      "https://ot2k4d59.mirror.aliyun.com/"
    ],
    "graph": "/data/docker" #修改docker的鏡像存儲路徑

}

由于默認情況下 kubelet 使用的 cgroupdriver 是 systemd鄙才,所以需要保持 docker 和kubelet 的 cgroupdriver 一致颂鸿,我們這里修改 docker 的 cgroupdriver=systemd。如果不修改 docker 則需要修改 kubelet 的啟動配置攒庵,需要保證兩者一致嘴纺。

啟動Docker:
systemctl start docker 
systemctl enable docker

在確保 Docker 安裝完成后,上面的相關環(huán)境配置也完成了浓冒,現(xiàn)在我們就可以來安裝 Kubeadm 了栽渴,我們這里是通過指定yum 源的方式來進行安裝的:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
# 使用阿里云的源進行安裝
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
然后安裝kubeadm、kubelet裆蒸、kubectl:
# --disableexcludes 禁掉除了kubernetes之外的別的倉庫
[root@master sysctl.d]# yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 --disableexcludes=kubernetes
[root@master sysctl.d]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:15:39Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}

可以看到我們這里安裝的是 v1.16.2 版本熔萧,然后將 kubelet 設置成開機啟動:
systemctl enable --now kubelet

到這里為止,上面的所有操作都需要在所有節(jié)點上執(zhí)行配置僚祷。

初始化集群

然后接下來在master節(jié)點上配置kubeadm初始化文件佛致,可以通過如下命令導出默認的初始化配置
kubeadm config print init-defaults > kubeadm.yaml
然后根據(jù)我們自己的需求修改配置文件,比如修改imageRepository的值辙谜,kube-proxy的模式為ipvs俺榆,另外需要注意的是我們這里是準備安裝flanner網(wǎng)絡插件,需要將networking.podSubnet設置為10.244.0.0/16

如下:

[root@master ~]# cat kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 172.17.122.150 # apiserver 節(jié)點內(nèi)網(wǎng)地址
  bindPort: 6443  # apiserver通信端口装哆,后面node節(jié)點加入(join)到集群中時用的就是此端口和上面的IP地址
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: master # 默認讀取當前master節(jié)點的hostname
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: gcr.azk8s.cn/google_containers # 修改成微軟鏡像
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16 # Pod 網(wǎng)絡罐脊,flannel插件需要使用這個網(wǎng)段
  serviceSubnet: 10.96.0.0/12
scheduler: {}

---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs  # kube-proxy 模式

然后使用上面的配置文件進行初始化:
kubeadm init --config kubeadm.yaml

初始化部分信息如下:

......
certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
[control-plane] Creating static Pod manifest for "kube-scheduler"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 22.002232 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.16" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node master as control-plane by adding the label "node-role.kubernetes.io/master=''"
[mark-control-plane] Marking the node master as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Using token: abcdef.0123456789abcdef
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.17.122.150:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:27d2a487e4412c5085ccf97690133f0fed2db6a3d81e3af17af88e90bcbfb613

按照提示繼續(xù)操作:拷貝kubeconfig文件,kubectl會讀取此配置文件

[root@master ~]# mkdir -p $HOME/.kube

[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

kubeadm init 命令執(zhí)行流程如下圖所示:

1.png

添加節(jié)點

記住初始化集群上面的配置和操作要提前做好,將master節(jié)點上面的$HOME/.kube/config文件拷貝到node節(jié)點對應的文件中(為了kubectl可以讀取config配置文件執(zhí)行命令獲取集群信息)上炎,安裝kubeadm恃逻、kubelet、kubectl(kubectl可選),然后執(zhí)行上面的初始化完成后提示的join命令即可藕施。

[root@node01 ~]# kubeadm join 172.17.122.150:6443 --token abcdef.0123456789abcdef \
>     --discovery-token-ca-cert-hash sha256:27d2a487e4412c5085ccf97690133f0fed2db6a3d81e3af17af88e90bcbfb613
[preflight] Running pre-flight checks
    [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.16" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Activating the kubelet service
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
  • join命令
    如果忘記了上面的 join 命令可以使用命令 kubeadm token create --print-join-command 重新獲取寇损。
1.png

執(zhí)行成功后運行 get nodes 命令:

[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE   VERSION
master   NotReady   master   34m   v1.16.2
node01   NotReady   <none>   22s   v1.16.2
node02   NotReady   <none>   5s    v1.16.2

可以看到是NotReady狀態(tài),這是因為還沒有安裝網(wǎng)絡插件裳食,接下來安裝網(wǎng)絡插件矛市,可以在文檔https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
中選擇我們要安裝的網(wǎng)絡插件,這里我們使用flannel插件:
wget https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
因為有的節(jié)點可能是多網(wǎng)卡诲祸,所以需要在資源清單文件中指定內(nèi)網(wǎng)網(wǎng)卡
搜索到名為kube-flannel-ds-adm64的DaemonSet浊吏,在kube-flannel容器下面

1.png

然后安裝flannel網(wǎng)絡插件
kubectl apply -f kube-flannel.yml # 安裝flannel網(wǎng)絡插件,master節(jié)點安裝即可

[root@master ~]# kubectl apply -f kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds-amd64 created
daemonset.apps/kube-flannel-ds-arm64 created
daemonset.apps/kube-flannel-ds-arm created
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created

隔一會查看Pod運行狀態(tài)

[root@master ~]# kubectl get pods -n kube-system
NAME                             READY   STATUS     RESTARTS   AGE
coredns-667f964f9b-99rbr         1/1     Running    0          100m
coredns-667f964f9b-w2gt7         1/1     Running    0          100m
etcd-master                      1/1     Running    0          99m
kube-apiserver-master            1/1     Running    0          99m
kube-controller-manager-master   1/1     Running    0          99m
kube-flannel-ds-amd64-d7bb5      0/1     Init:0/1   0          62s  #
kube-flannel-ds-amd64-tqzkw      0/1     Init:0/1   0          62s  #
kube-flannel-ds-amd64-x922j      1/1     Running    0          62s  #
kube-proxy-25qd4                 1/1     Running    0          100m
kube-proxy-bqb2f                 1/1     Running    0          66m
kube-proxy-rz2tb                 1/1     Running    0          66m
kube-scheduler-master            1/1     Running    0          99m

再等一會查看

[root@master ~]# kubectl get pods -n kube-system
NAME                             READY   STATUS     RESTARTS   AGE
coredns-667f964f9b-99rbr         1/1     Running    0          103m
coredns-667f964f9b-w2gt7         1/1     Running    0          103m
etcd-master                      1/1     Running    0          103m
kube-apiserver-master            1/1     Running    0          102m
kube-controller-manager-master   1/1     Running    0          102m
kube-flannel-ds-amd64-d7bb5      0/1     Init:0/1   0          4m25s  #
kube-flannel-ds-amd64-tqzkw      1/1     Running    0          4m25s  #
kube-flannel-ds-amd64-x922j      1/1     Running    0          4m25s  #
kube-proxy-25qd4                 1/1     Running    0          103m
kube-proxy-bqb2f                 1/1     Running    0          69m
kube-proxy-rz2tb                 1/1     Running    0          69m
kube-scheduler-master            1/1     Running    0          103m

再等待一會

[root@master ~]# kubectl get pods -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-667f964f9b-99rbr         1/1     Running   0          106m
coredns-667f964f9b-w2gt7         1/1     Running   0          106m
etcd-master                      1/1     Running   0          105m
kube-apiserver-master            1/1     Running   0          105m
kube-controller-manager-master   1/1     Running   0          105m
kube-flannel-ds-amd64-d7bb5      1/1     Running   0          6m54s  #
kube-flannel-ds-amd64-tqzkw      1/1     Running   0          6m54s  #
kube-flannel-ds-amd64-x922j      1/1     Running   0          6m54s  #
kube-proxy-25qd4                 1/1     Running   0          106m
kube-proxy-bqb2f                 1/1     Running   0          72m
kube-proxy-rz2tb                 1/1     Running   0          72m
kube-scheduler-master            1/1     Running   0          105m

注意每次查看時的結果(標記#)可以看到網(wǎng)絡插件正在運行到各個節(jié)點,直至節(jié)點全部為Running狀態(tài)烦绳。

  • Flannel網(wǎng)絡插件
    當我們部署完網(wǎng)絡插件后執(zhí)行 ifconfig 命令卿捎,正常會看到新增的cni0與flannel1這兩個虛擬設備,但是如果沒有看到cni0這個設備也不用太擔心径密,我們可以觀察/var/lib/cni目錄是否存在午阵,如果不存在并不是說部署有問題,而是該節(jié)點上暫時還沒有應用運行享扔,我們只需要在該節(jié)點上運行一個 Pod 就可以看到該目錄會被創(chuàng)建底桂,并且cni0設備也會被創(chuàng)建出來。

此時再查看集群狀態(tài)惧眠,也就正常了籽懦。

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE    VERSION
master   Ready    master   112m   v1.16.2
node01   Ready    <none>   78m    v1.16.2
node02   Ready    <none>   78m    v1.16.2

Dashboard的安裝

v1.16.2版本的集群需要安裝最新的2.0+版本的Dashboard:

推薦使用下面這種方式
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta5/aio/deploy/recommended.yaml

vim recommended.yaml


1.png

添加type: NodePort是為了外部能夠訪問k8s集群,具體請參考Kubernetes的三種外部訪問方式:NodePort氛魁、LoadBalancer和Ingress暮顺。

  • 監(jiān)控組件
    在YAML文件中可以看到新版本Dashboard集成了一個metrics-scraper的組件,可以通過Kubernetes的Mettrcs API收集一些基礎資源的監(jiān)控信息秀存,并在web頁面上展示捶码,所以要想在頁面上展示監(jiān)控信息就需要提供Metrics API,比如安裝Metrics Server。

直接創(chuàng)建:
kubectl apply -f recommended.yaml

[root@master ~]# kubectl apply -f recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

新版本的 Dashboard 會被默認安裝在 kubernetes-dashboard 這個命名空間下面:

[root@master ~]# kubectl get pods -n kubernetes-dashboard -l k8s-app=kubernetes-dashboard
NAME                                    READY   STATUS    RESTARTS   AGE
kubernetes-dashboard-6b86b44f87-z5zjq   1/1     Running   0          54s

參數(shù)說明:

-n: 指定k8s的namespace名稱
-l:  --selector='': Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
1.png
[root@master ~]#  kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.100.100.100   <none>        8000/TCP        11m
kubernetes-dashboard        NodePort    10.97.88.252     <none>        443:31982/TCP   11m

然后可以通過上面的31982端口訪問Dashboard或链,要記住使用https惫恼。

然后創(chuàng)建一個具有全局所有權限的用戶來登錄Dashboard:(admin.yaml)

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: admin
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kubernetes-dashboard

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kubernetes-dashboard

直接創(chuàng)建

[root@master ~]# kubectl apply -f admin.yaml
clusterrolebinding.rbac.authorization.k8s.io/admin created
serviceaccount/admin created
[root@master ~]# kubectl get secret -n kubernetes-dashboard|grep admin-token
admin-token-mwcv6                  kubernetes.io/service-account-token   3      2m58s
[root@master ~]# kubectl get secret admin-token-mwcv6 -o jsonpath={.data.token} -n kubernetes-dashboard |base64 -d #會獲取一長串字符串
# 注意:第一條命令的第一個字段值會被用在第二條命令上,拿來獲取字符串

拿到此token后輸入到登錄頁面的token處澳盐,即可登錄到Dashboard控制臺祈纯。

如果你的集群安裝過程中遇到了其他問題令宿,我們可以使用下面的命令來進行重置:

$ kubeadm reset
$ ifconfig cni0 down && ip link delete cni0
$ ifconfig flannel.1 down && ip link delete flannel.1
$ rm -rf /var/lib/cni/
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市腕窥,隨后出現(xiàn)的幾起案子粒没,更是在濱河造成了極大的恐慌,老刑警劉巖簇爆,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件革娄,死亡現(xiàn)場離奇詭異,居然都是意外死亡冕碟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門匆浙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來安寺,“玉大人,你說我怎么就攤上這事首尼√羰” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵软能,是天一觀的道長迎捺。 經(jīng)常有香客問我,道長查排,這世上最難降的妖魔是什么凳枝? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮跋核,結果婚禮上岖瑰,老公的妹妹穿的比我還像新娘。我一直安慰自己砂代,他們只是感情好蹋订,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刻伊,像睡著了一般露戒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捶箱,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天智什,我揣著相機與錄音,去河邊找鬼讼呢。 笑死撩鹿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的悦屏。 我是一名探鬼主播节沦,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼键思,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了甫贯?” 一聲冷哼從身側(cè)響起吼鳞,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叫搁,沒想到半個月后赔桌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡渴逻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年疾党,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惨奕。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡雪位,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出梨撞,到底是詐尸還是另有隱情雹洗,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布卧波,位于F島的核電站时肿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏港粱。R本人自食惡果不足惜螃成,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望查坪。 院中可真熱鬧锈颗,春花似錦、人聲如沸咪惠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遥昧。三九已至覆醇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炭臭,已是汗流浹背永脓。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鞋仍,地道東北人常摧。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親落午。 傳聞我的和親對象是個殘疾皇子谎懦,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容