Kubernetes 學(xué)習(xí)筆記(一 <備份>)--- 基本概念及利用kubeadm部署K8S

Kubernetes中文文檔
http://docs.kubernetes.org.cn/

目錄

一澈蚌、K8S由來(lái)

二氓侧、K8S特性
    自動(dòng)裝箱
    自我修復(fù)
    水平擴(kuò)展
    服務(wù)發(fā)現(xiàn)/負(fù)載均衡
    自動(dòng)發(fā)布和回滾
    密鑰和配置管理
    存儲(chǔ)編排
    批量處理執(zhí)行

三秉版、K8S的架構(gòu)
    API Server
    Scheduler
    Controller-Manager
    Kubelet
    Kube-proxy

四燎悍、邏輯概念
    Pod
    Pod控制器

五沪羔、K8S網(wǎng)絡(luò)

六韧掩、通過(guò)kubeadm部署K8S集群
    1. 環(huán)境準(zhǔn)備(所有節(jié)點(diǎn))
    2. kubeadm初始化
    3. 在master部署flannel
    4. 擴(kuò)展Pod的副本個(gè)數(shù)
    5. 配置kubectl子命令自動(dòng)補(bǔ)全

一、K8S由來(lái)

Kuberbetes簡(jiǎn)稱K8S旭等,是由Google的幾位工程師創(chuàng)立的酌呆,2014年6月首次對(duì)外公布。K8S的開(kāi)發(fā)深受谷歌內(nèi)部的一個(gè)叫做Borg系統(tǒng)的影響搔耕,Borg系統(tǒng)是谷歌內(nèi)部穩(wěn)定運(yùn)行了十幾年的大規(guī)模容器編排工具隙袁。谷歌沿用Borg系統(tǒng)的思路,用GO語(yǔ)言重新構(gòu)建了這個(gè)容器編排工具弃榨,并命名為Kubernetes菩收。

二、K8S特性

自動(dòng)裝箱

基于資源依賴鲸睛,以及其它約束坛梁,能夠自動(dòng)完成容器的部署而且不影響可用性。

自我修復(fù)

具有自愈能力腊凶,考慮到容器非常輕量級(jí)的特點(diǎn)划咐,一旦某個(gè)應(yīng)用容器崩潰了拴念,可以很快啟動(dòng)一個(gè)新的應(yīng)用容器替代褐缠。

水平擴(kuò)展

能夠?qū)崿F(xiàn)自動(dòng)水平擴(kuò)展政鼠,一個(gè)容器不夠,就再啟一個(gè)队魏,可以不斷的擴(kuò)展公般,只要你的物理平臺(tái)資源足夠。

服務(wù)發(fā)現(xiàn)/負(fù)載均衡

自動(dòng)實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡

自動(dòng)發(fā)布和回滾

密鑰和配置管理

存儲(chǔ)編排

對(duì)存儲(chǔ)卷實(shí)現(xiàn)動(dòng)態(tài)供給胡桨。如某一個(gè)容器需要用到存儲(chǔ)卷時(shí)官帘,會(huì)根據(jù)容器的需求自動(dòng)創(chuàng)建符合要求的存儲(chǔ)卷

批量處理執(zhí)行

三、K8S的架構(gòu)

Kubernetes集群包含有節(jié)點(diǎn)代理Kubelet 和Master組件(APIs昧谊,scheduler刽虹,etc.),下面是K8S的架構(gòu)圖呢诬。


image.png

Master節(jié)點(diǎn)包含API Server涌哲、Scheduler(調(diào)度器)、ControllerManager(控制器管理器)這三個(gè)核心的組件尚镰。Node節(jié)點(diǎn)包含的核心組件有Kubelet阀圾、Docker容器引擎、Kube-proxy

API Server

負(fù)責(zé)接受請(qǐng)求狗唉,解析請(qǐng)求初烘,處理請(qǐng)求

Scheduler

調(diào)度器,它負(fù)責(zé)監(jiān)測(cè)每一個(gè)Node節(jié)點(diǎn)上的可用計(jì)算資源分俯,并根據(jù)用戶創(chuàng)建容器時(shí)的最小資源請(qǐng)求量去評(píng)估哪個(gè)Node節(jié)點(diǎn)最合適肾筐,就把容器創(chuàng)建在最合適的Node節(jié)點(diǎn)上。

Controller-Manager

負(fù)責(zé)監(jiān)控每一個(gè)Controller(控制器)的健康狀態(tài)澳迫,并確本殖荩控制器是健康的剧劝。而控制器是確保Pod健康的組件橄登。

Kubelet

是用于與Master節(jié)點(diǎn)的API Server進(jìn)行通信,并接受Master調(diào)度過(guò)來(lái)的各種任務(wù)并執(zhí)行的集群代理讥此。

Kube-proxy

負(fù)責(zé)管理Service

四拢锹、邏輯概念

Pod

K8S并不是直接調(diào)度容器,K8S中最小的調(diào)度單元是Pod萄喳。容器是運(yùn)行在Pod內(nèi)部的卒稳,并且一個(gè)Pod內(nèi)可以運(yùn)行多個(gè)容器,這多個(gè)容器共享同一個(gè)底層的網(wǎng)絡(luò)名稱空間他巨,它們共享底層的Net充坑、UTS减江、IPC三個(gè)名稱空間。另外三個(gè)名稱空間是互相隔離的:USER捻爷、MNT辈灼、PID。同一個(gè)Pod中的容器通過(guò)lo進(jìn)行通信也榄。同一個(gè)Pod中的容器還共享第二種資源:存儲(chǔ)卷巡莹。通常情況下一個(gè)Pod中只放一個(gè)容器,除非多個(gè)容器間有非常非常緊密的聯(lián)系甜紫。

K8S把Pod分為兩類:

  • 自主式Pod降宅,是自我管理的,只在某個(gè)節(jié)點(diǎn)上運(yùn)行囚霸,一旦節(jié)點(diǎn)故障腰根,Pod就會(huì)丟失,不支持全局調(diào)度邮辽;
  • 由控制器管理的Pod唠雕,它是由Pod控制器進(jìn)行管理的。

Pod控制器

常見(jiàn)的Pod控制器:

  • ReplicationController (副本控制器)吨述,確保Pod的數(shù)量始終保持設(shè)定的個(gè)數(shù)岩睁。也支持Pod的滾動(dòng)更新。
  • ReplicaSet (副本集)揣云,它不直接使用捕儒,有一個(gè)聲明式更新的控制器叫Deployment來(lái)負(fù)責(zé)管理。但是Deployment只能負(fù)責(zé)管理那些無(wú)狀態(tài)的應(yīng)用邓夕。
  • StatefulSet (有狀態(tài)副本集)刘莹,負(fù)責(zé)管理有狀態(tài)的應(yīng)用。
  • DaemonSet 焚刚,如果需要在每一個(gè)Node上只運(yùn)行一個(gè)副本点弯,而不是隨意運(yùn)行,就需要DaemonSet矿咕。
  • Job抢肛,運(yùn)行作業(yè),對(duì)于時(shí)間不固定的操作碳柱,比如:某個(gè)應(yīng)用生成了一大堆數(shù)據(jù)集捡絮,現(xiàn)在需要臨時(shí)啟動(dòng)一個(gè)Pod去清理這些數(shù)據(jù)集,清理完成后莲镣,這個(gè)Pod就可以結(jié)束了福稳。 這些不需要一直處于運(yùn)行狀態(tài)的應(yīng)用,就用Job這個(gè)類型的控制器去控制瑞侮。如果Pod運(yùn)行過(guò)程中意外中止了的圆,Job負(fù)責(zé)重啟Pod症革。如果Pod任務(wù)執(zhí)行完了卦睹,就不需要再啟動(dòng)了涛救。
  • Cronjob边败,周期性作業(yè)。

Deployment這種控制器還支持二級(jí)控制器叮称,叫HPA (HorizontalPodAutoscaler种玛,水平Pod自動(dòng)伸縮控制器)。當(dāng)業(yè)務(wù)量增長(zhǎng)瓤檐,一組Pod不足以支持業(yè)務(wù)時(shí)赂韵,HPA會(huì)自動(dòng)增加Pod數(shù)量,業(yè)務(wù)量下降后挠蛉,還會(huì)自動(dòng)減少Pod數(shù)量祭示。

五、K8S網(wǎng)絡(luò)

K8S中包含三種網(wǎng)絡(luò):

  • 節(jié)點(diǎn)網(wǎng)絡(luò): 各個(gè)節(jié)點(diǎn)主機(jī)之間的通信網(wǎng)絡(luò)谴古;
  • Service網(wǎng)絡(luò):也被稱為集群網(wǎng)絡(luò)质涛;
  • Pod網(wǎng)絡(luò):Pod之間通信的網(wǎng)絡(luò)。
image.png

K8S通過(guò)CNI(Container Network Interface掰担,容器網(wǎng)絡(luò)接口)插件體系來(lái)接入外部的網(wǎng)絡(luò)解決方案汇陆。這些插件都應(yīng)該提供Service網(wǎng)絡(luò)和Pod網(wǎng)絡(luò)。
以下三種常用的CNI插件:

  • flannel : 支持網(wǎng)絡(luò)配置带饱;是疊加網(wǎng)絡(luò)毡代。簡(jiǎn)單,但是不支持網(wǎng)絡(luò)策略勺疼;CoreOS開(kāi)源項(xiàng)目
  • calico :支持網(wǎng)絡(luò)配置教寂、網(wǎng)絡(luò)策略;是三層遂道網(wǎng)絡(luò)执庐。缺點(diǎn):功能強(qiáng)大酪耕,但網(wǎng)絡(luò)配置較為復(fù)雜。
  • canel : 是結(jié)合了flannel和calico的優(yōu)點(diǎn)轨淌,使用flannel的網(wǎng)絡(luò)配置迂烁、使用calico的網(wǎng)絡(luò)策略。
  • 猿诸。婚被。狡忙。最常用的就是這三種梳虽,其他網(wǎng)絡(luò)插件不一一列舉。

以上這些網(wǎng)絡(luò)插件可以做為節(jié)點(diǎn)上的守護(hù)進(jìn)程運(yùn)行灾茁,也可以托管在K8S之上做為容器運(yùn)行窜觉。

六谷炸、通過(guò)kubeadm部署K8S集群

kubeadm是K8S官方提供的集群部署工具。kubeadm將master節(jié)點(diǎn)上的apiserver禀挫、scheduler旬陡、controller-manager、etcd和node節(jié)點(diǎn)上的kube-proxy都部署為Pod運(yùn)行语婴,所以master和node都需要安裝kubelet和docker描孟。

image.png
image.png

主機(jī)準(zhǔn)備:

主機(jī)名 IP 系統(tǒng) 配置
k8s-master.fhw.com 192.168.100.135 CentOS7.4 4C8G
k8s-node1.fhw.com 192.168.100.136 CentOS7.4 2C8G
k8s-node2.fhw.com 192.168.100.137 CentOS7.4 2C8G

1. 環(huán)境準(zhǔn)備(所有節(jié)點(diǎn))

關(guān)閉防火墻和禁用selinux

systemctl stop firewalld
setenforce 0

準(zhǔn)備yum源

rm -rf /etc/yum.repos.d/*

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
yum makecache fast
yum install -y vim wget net-tools lrzsz
cd /etc/yum.repos.d
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

準(zhǔn)備kubernetes的Yum源文件

[root@k8s-master yum.repos.d]# cat kubernetes.repo 
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

安裝docker

yum install docker-ce -y 

修改docker啟動(dòng)配置文件,在[Service]下加入如下內(nèi)容:
vim /usr/lib/systemd/system/docker.service

Environment="NO_PROXY=127.0.0.0/8,172.20.0.0/16,reg.fhw.com,192.168.100.0/24"
ExecStart=/usr/bin/dockerd --insecure-registry=reg.fhw.com --insecure-registry=192.168.100.0/24

Environment="NO_PROXY=192.168.100.0/24" # 將自己的鏡像倉(cāng)庫(kù)地址設(shè)置不通過(guò)代理訪問(wèn)

啟動(dòng)Docker

systemctl enable docker
systemctl start docker

確保以下兩個(gè)內(nèi)核參數(shù)為1:

[root@k8s-master ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables 
1
[root@k8s-master ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables 
1

kubelet相關(guān)文件介紹:

[root@k8s-master ~]# rpm -ql kubelet
/etc/kubernetes/manifests               # 清單目錄
/etc/sysconfig/kubelet                  # kubelet配置文件
/etc/systemd/system/kubelet.service     # unit文件
/usr/bin/kubelet                        # 二進(jìn)制可執(zhí)行文件

設(shè)置kubelet開(kāi)機(jī)自啟

systemctl enable kubelet

此時(shí)砰左,因?yàn)楦鞣N配置還沒(méi)有初始化完成匿醒,初始化完成以后才能啟動(dòng)kubelet。

kubeadm init相關(guān)參數(shù):

[root@k8s-master ~]# kubeadm init --help
Run this command in order to set up the Kubernetes master.

Usage:
  kubeadm init [flags]

Flags:
      --apiserver-advertise-address string   API Server監(jiān)聽(tīng)的IP地址缠导,默認(rèn)是0.0.0.0
      --apiserver-bind-port int32            API Server監(jiān)聽(tīng)的端口 (default 6443)
      --apiserver-cert-extra-sans strings    Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names.
      --cert-dir string                      保存和存儲(chǔ)證書的路徑廉羔。(default "/etc/kubernetes/pki")
      --config string                        kubeadm配置文件的路徑。 警告:配置文件的使用是實(shí)驗(yàn)性的僻造。
      --cri-socket string                    指定要連接的CRI套接字憋他。 (default "/var/run/dockershim.sock")
      --dry-run                              Don't apply any changes; just output what would be done.
      --feature-gates string                 A set of key=value pairs that describe feature gates for various features. Options are:
                                             Auditing=true|false (ALPHA - default=false)
                                             CoreDNS=true|false (default=true)
                                             DynamicKubeletConfig=true|false (ALPHA - default=false)
                                             SelfHosting=true|false (ALPHA - default=false)
                                             StoreCertsInSecrets=true|false (ALPHA - default=false)
  -h, --help                                 help for init
      --ignore-preflight-errors strings      預(yù)檢查時(shí)忽略哪些錯(cuò)誤。Example: 'IsPrivilegedUser,Swap'. 值為“all”時(shí)髓削,忽略所有檢查到的錯(cuò)誤竹挡。
      --kubernetes-version string            指定Kubernetes版本。 (default "stable-1.11")
      --node-name string                     Specify the node name.
      --pod-network-cidr string              指定Pod網(wǎng)絡(luò)的IP地址范圍立膛。 如果設(shè)置此迅,控制平面將自動(dòng)為每個(gè)節(jié)點(diǎn)分配CIDR。
      --service-cidr string                  Service網(wǎng)絡(luò)使用的IP地址范圍旧巾。 (default "10.96.0.0/12")
      --service-dns-domain string            Use alternative domain for services, e.g. "myorg.internal". (default "cluster.local")
      --skip-token-print                     Skip printing of the default bootstrap token generated by 'kubeadm init'.
      --token string                         The token to use for establishing bidirectional trust between nodes and masters. The format is [a-z0-9]{6}\.[a-z0-9]{16} - e.g. abcdef.0123456789abcdef
      --token-ttl duration                   The duration before the token is automatically deleted (e.g. 1s, 2m, 3h). If set to '0', the token will never expire (default 24h0m0s)

Global Flags:
  -v, --v Level   log level for V logs

配置忽略Swap相關(guān)報(bào)錯(cuò)

[root@k8s-master ~]# cat /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

先拉取必要鏡像并重新打tag (只在master節(jié)點(diǎn)操作即可)

docker pull gcrxio/kube-apiserver-amd64:v1.11.3
docker pull gcrxio/kube-controller-manager-amd64:v1.11.3
docker pull gcrxio/kube-scheduler-amd64:v1.11.3
docker pull gcrxio/kube-proxy-amd64:v1.11.3
docker pull gcrxio/pause:3.1
docker pull gcrxio/etcd-amd64:3.2.18
docker pull gcrxio/coredns:1.1.3

docker tag gcrxio/kube-apiserver-amd64:v1.11.3 k8s.gcr.io/kube-apiserver-amd64:v1.11.3
docker tag gcrxio/kube-proxy-amd64:v1.11.3 k8s.gcr.io/kube-proxy-amd64:v1.11.3
docker tag gcrxio/kube-controller-manager-amd64:v1.11.3 k8s.gcr.io/kube-controller-manager-amd64:v1.11.3
docker tag gcrxio/kube-scheduler-amd64:v1.11.3 k8s.gcr.io/kube-scheduler-amd64:v1.11.3
docker tag gcrxio/coredns:1.1.3 k8s.gcr.io/coredns:1.1.3
docker tag gcrxio/etcd-amd64:3.2.18 k8s.gcr.io/etcd-amd64:3.2.18
docker tag gcrxio/pause:3.1 k8s.gcr.io/pause:3.1

k8s.gcr.io/pause:3.1是為pod提供底層基礎(chǔ)的容器耸序,它僅為pod分配網(wǎng)絡(luò)名稱空間,IP地址鲁猩、主機(jī)名和存儲(chǔ)卷坎怪。

2. kubeadm初始化

kubeadm init --kubernetes-version=v1.11.3 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

出下如下截圖,表示初始化成功


image.png

生產(chǎn)環(huán)境中廓握,如圖中提示搅窿,用一個(gè)普通用戶配置后操作:

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

測(cè)試環(huán)境我就直接用root操作了。

查看各組件狀態(tài)信息:

[root@k8s-master ~]# kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok                   
scheduler            Healthy   ok                   
etcd-0               Healthy   {"health": "true"}

在node1和node2執(zhí)行以下命令隙券,以加入k8s集群:

kubeadm join 192.168.100.135:6443 --token edsptl.yqqaxnrzg3n09bk8 --discovery-token-ca-cert-hash sha256:ce4ee322a957729cdb0f59ba9d6be15edd585ba1a7a605e6c5a70f54aadc7d2f --ignore-preflight-errors=Swap

# 拉鏡像和打tag男应,以下兩個(gè)鏡像是node節(jié)點(diǎn)運(yùn)行起來(lái)的必要鏡像
docker pull gcrxio/pause:3.1
docker pull gcrxio/kube-proxy-amd64:v1.11.3
docker tag gcrxio/pause:3.1 k8s.gcr.io/pause:3.1
docker tag gcrxio/kube-proxy-amd64:v1.11.3 k8s.gcr.io/kube-proxy-amd64:v1.11.3

在master節(jié)點(diǎn)查看節(jié)點(diǎn)信息,可以看到node1和node2已經(jīng)加入集群了:

[root@k8s-master ~]# kubectl get nodes
NAME                 STATUS     ROLES     AGE       VERSION
k8s-master.fhw.com   NotReady   master    19m       v1.11.3
k8s-node1.fhw.com    NotReady   <none>    48s       v1.11.3
k8s-node2.fhw.com    NotReady   <none>    7s        v1.11.3

之所為STATUS是NotReady (未就緒狀態(tài))娱仔,是因?yàn)槿鄙倬W(wǎng)絡(luò)插件flannel或calico沐飘。這里我們用flannel做為集群的網(wǎng)絡(luò)插件。

3. 在master部署flannel

# kubernetes 1.7以上的版本,可以直接執(zhí)行如下命令部署flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

出現(xiàn)下圖耐朴,并不表示flannel已經(jīng)部署成功了借卧。


image.png

此時(shí)在拉取flannel的鏡像,有點(diǎn)慢筛峭。铐刘。。影晓,等待flannel的pod變?yōu)镽unning狀態(tài)才是成功了镰吵。


image.png

從上圖還可以看出coredns的狀態(tài)為ImagePullBackOff, 這表示鏡像拉取失敗了」仪可以通過(guò)命令kubectl describe pod coredns-78fcdf6894-dqjzn -n kube-system查看Events :

image.png

可以看到確實(shí)是拉取鏡像k8s.gcr.io/coredns:1.1.3失敗了捡遍。

再看一下coredns的pod是部署在哪個(gè)節(jié)點(diǎn)上:


image.png

圖中是部署在node1節(jié)點(diǎn),再查看另一個(gè)coredns 的pod是部署在哪個(gè)節(jié)點(diǎn)上竹握。然后在對(duì)應(yīng)的節(jié)點(diǎn)主機(jī)上手動(dòng)拉取鏡像画株。
解決方法如下:

# 拉取coredns的鏡像再重新打tag
docker pull coredns/coredns:1.1.3
docker tag coredns/coredns:1.1.3 k8s.gcr.io/coredns:1.1.3

鏡像拉下來(lái)后,過(guò)一會(huì)再次查看coredns的狀態(tài)是否為Running

image.png

再看看各個(gè)節(jié)點(diǎn)狀態(tài)


image.png

三個(gè)節(jié)點(diǎn)都已經(jīng)是Ready狀態(tài)了啦辐。

4. 擴(kuò)展Pod的副本個(gè)數(shù)

獲取deployment

[root@k8s-master .kube]# kubectl get deployment -n kube-system
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
coredns   2         2         2            0           14h

AVAILABLE為0表示coredns可用的pod個(gè)數(shù)為0谓传,也就是部署兩個(gè)coredns pod都沒(méi)有成功,原因就是第3小節(jié)中coredns的鏡像拉取失敗造成的芹关。

擴(kuò)展pod數(shù)量

[root@k8s-master .kube]# kubectl scale --replicas=3 deployment/coredns -n kube-system
deployment.extensions/coredns scaled

coredns鏡像拉取失敗的問(wèn)題解決后续挟,再次查看deployment:

[root@k8s-master ~]# kubectl get deployment -n kube-system
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
coredns   3         3         3            3           14h

此時(shí)3個(gè)coredns pod都正常運(yùn)行,AVAILABLE值變?yōu)?了侥衬。

5. 配置kubectl子命令自動(dòng)補(bǔ)全

先確認(rèn)當(dāng)前shell

[root@k8s-master ~]# echo $SHELL
/bin/bash

安裝必要的包

yum install bash-completion -y
# 當(dāng)前shell為bash:
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

# 如果當(dāng)前shell為zsh:
source <(kubectl completion zsh)
echo "source <(kubectl completion zsh)" >> ~/.bashrc

6. 部署K8S Dashboard

6.1 部署

在Github上: https://github.com/kubernetes/dashboard 在這個(gè)頁(yè)面上獲取部署K8S Dashboard的命令:

image.png

先將kubernetes-dashboard.yaml下載下來(lái)诗祸,修改一些東西

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

修改鏡像為siriuszg/kubernetes-dashboard-amd64:v1.10.0

image.png

修改Service類型為NodePort轴总,這樣可以從K8S集群外部訪問(wèn)Dashboard直颅;添加nodePort: 30001, 指定外部訪問(wèn)時(shí)用的端口。

image.png

執(zhí)行如下命令部署Kubernetes Dashboard:

kubectl apply -f kubernetes-dashboard.yaml

注意:以上命令依賴谷歌的鏡像:k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0怀樟,國(guó)內(nèi)因?yàn)榫W(wǎng)絡(luò)原因無(wú)法正常拉取此鏡像功偿。通過(guò)如下命令生成所需要的鏡像:

如果遇到如下問(wèn)題,注意查檢firewalld服務(wù)是否停用往堡。

Error while initializing connection to Kubernetes apiserver. This most likely means that the cluster is misconfigured (e.g., it has invalid apiserver certificates or service account's configuration) or the --apiserver-host param points to a server that does not exist. Reason: Get https://10.96.0.1:443/version: dial tcp 10.96.0.1:443: getsockopt: no route to host

停止firewalld服務(wù):systemctl stop firewalld, systemctl disable firewalld, firewalld服務(wù)啟動(dòng)會(huì)影響K8S集群中的Pod之間相互訪問(wèn)械荷。

獲取kubernetes-dashboard的Service


image.png

瀏覽器訪問(wèn):https://192.168.100.135:30001/,出現(xiàn)下圖界面


image.png

這表明Dashboard已經(jīng)成功部署虑灰,接下來(lái)配置認(rèn)證信息吨瞎。

6.2 配置認(rèn)證信息

從上圖中可以看出有Kubeconfig令牌兩種認(rèn)證方法。
認(rèn)證時(shí)的賬號(hào)必須為ServiceAccount: 被Dashboard Pod拿來(lái)由Kubernetes進(jìn)行認(rèn)證穆咐。

令牌認(rèn)證(也就是token認(rèn)證)
創(chuàng)建ServiceAccount颤诀,根據(jù)其管理目標(biāo),使用rolebinding或clusterrolebinding綁定至合理的role或clusterrole。

創(chuàng)建serviceaccount

kubectl create serviceaccount dashboard-admin -n kube-system

dashboard-admin與集群管理員建立綁定關(guān)系

[root@k8s-master ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created

--serviceaccount=NAMESPACE:SERVICEACCOUNT

獲取dashboard-admin這個(gè)serviceaccount的secret信息:

[root@k8s-master ~]# kubectl get secrets -n kube-system | grep dashboard-admin
dashboard-admin-token-fg5s8                      kubernetes.io/service-account-token   3         7m
[root@k8s-master ~]# 
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl describe secrets dashboard-admin-token-fg5s8 -n kube-system 
Name:         dashboard-admin-token-fg5s8
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=dashboard-admin
              kubernetes.io/service-account.uid=0f74c4f6-d2d7-11e8-8078-000c29eced73

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tZmc1czgiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMGY3NGM0ZjYtZDJkNy0xMWU4LTgwNzgtMDAwYzI5ZWNlZDczIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.RzDorq-mQ8Mwb75LGKKC4vd5SRzxq7d7GxD9pG43xi4WCoftiIIBI38WvWGBn5MXYYFVwDqjkNfLMJStMTXiJomlLd7xJtGphdHJ8PR-jnyIGksDiNFicUOKjG7k6OGkKbCfIPb0cPglcNfceO8aNzRadiTasgoXLyxCpYRQd6kH4rx4UVLUWkEjWYTG4PNkNVjA4duRZ2FuKCdpqhysGwiQo9RMzUF9rTQToCQlu-N-UmsRqsGDAnx6GuZNX5BC97Yrzw1iRiFboekm2-RtGZPYczkVN7N9cP4GQPaNfoPVSpNPDx-y-Go_XqENdiniPQzwq9cUFON1l177hyo_RQ

上述輸出結(jié)果中的token就是服務(wù)賬戶dashboard-admin的認(rèn)證令牌着绊。將token的值復(fù)制至瀏覽器登錄。


image.png

登錄成功熟尉。

創(chuàng)建Kubeconfig認(rèn)證
這里我們創(chuàng)建一個(gè)只對(duì)default這個(gè)名稱空間有操作權(quán)限的賬戶归露。

創(chuàng)建一個(gè)serviceaccount

[root@k8s-master ~]# kubectl create serviceaccount def-ns-admin -n default
serviceaccount/def-ns-admin created

由于我們想讓def-ns-admin這個(gè)賬號(hào)只對(duì)default名稱空間有管理員權(quán)限,所以必須用rolebinding去綁定role斤儿,這樣這個(gè)賬號(hào)才只對(duì)這一個(gè)名稱空間有管理員權(quán)限剧包。

[root@k8s-master ~]# kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin
rolebinding.rbac.authorization.k8s.io/def-ns-admin created

這里我把rolebinding和serviceaccount都命名為def-ns-admin,不要搞混淆了往果。

獲取def-ns-admin的secret疆液,利用它的token來(lái)生成kubeconfig文件:

[root@k8s-master ~]# kubectl get secrets  | grep def-ns-admin
def-ns-admin-token-6jr4v   kubernetes.io/service-account-token   3         9m
[root@k8s-master ~]# 
[root@k8s-master ~]# 
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl describe secrets def-ns-admin-token-6jr4v 
Name:         def-ns-admin-token-6jr4v
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=def-ns-admin
              kubernetes.io/service-account.uid=02d5e211-d2d9-11e8-8078-000c29eced73

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZi1ucy1hZG1pbi10b2tlbi02anI0diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJkZWYtbnMtYWRtaW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwMmQ1ZTIxMS1kMmQ5LTExZTgtODA3OC0wMDBjMjllY2VkNzMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpkZWYtbnMtYWRtaW4ifQ.nrNVbuxrJra-cp3BOnWPzfbeQc_0Xe1E0xVzkDkxY6rJ9HexP4fbJIBvUmiqWyoFs5Yq9TT9wRQ_6kaOus0wjcjd7HWx5ZZzui-_UyQzvc3PRqwvWvn11ldLLHAz-7CM37Bcmm-eorj3JOeDvJF4OiloKiAPZ-9xxMQagqckSfa_VB7GGfOzOuRiRSi_fbC5ii81qCvAZxwgqIKFDhUUhXICOQVnZEW5FxMPdZAvYNziug6Ze7iPiAhFysq4ErUHBXzV6D1jghjNYiq01WkAbCmz7uLj7JVatJB9K28da-Wqc6cEBrP80uAfky9f4kz0SglxwqFVrXTd8X_GMqjd2Q

set-cluster

[root@k8s-master pki]# kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.crt --server="https://192.168.100.135:6443" --embed-certs=true --kubeconfig=/root/def-ns-admin.conf
Cluster "kubernetes" set.

查看:

[root@k8s-master pki]# kubectl config view --kubeconfig=/root/def-ns-admin.conf 
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://192.168.100.135:6443
  name: kubernetes
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []

set-credentials

[root@k8s-master ~]# DEF_NS_ADMIN_TOKEN=$(kubectl get secrets def-ns-admin-token-6jr4v -o jsonpath={.data.token} | base64 -d)
[root@k8s-master ~]# 
[root@k8s-master ~]# 
[root@k8s-master ~]# kubectl config set-credentials def-ns-admin --token=$DEF_NS_ADMIN_TOKEN --kubeconfig=/root/def-ns-admin.conf 
User "def-ns-admin" set.

查看


image.png

set-context

kubectl config set-context def-ns-admin@kubernetes --cluster=kubernetes --user=def-ns-admin --kubeconfig=/root/def-ns-admin.conf
Context "def-ns-admin@kubernetes" created.

查看


image.png

use-context

[root@k8s-master ~]# kubectl config use-context def-ns-admin@kubernetes --kubeconfig=/root/def-ns-admin.conf 
Switched to context "def-ns-admin@kubernetes".
image.png

現(xiàn)在/root/def-ns-admin.conf這個(gè)文件就可以做為Kubeconfig認(rèn)證的文件了。

將def-ns-admin.conf這個(gè)文件復(fù)制至瀏覽器所在系統(tǒng)上陕贮。使用Kubeconfig認(rèn)證方式:


image.png

成功登錄堕油,并且只對(duì)default名稱空間有管理權(quán)限:


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肮之,隨后出現(xiàn)的幾起案子掉缺,更是在濱河造成了極大的恐慌,老刑警劉巖戈擒,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眶明,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡筐高,警方通過(guò)查閱死者的電腦和手機(jī)搜囱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柑土,“玉大人蜀肘,你說(shuō)我怎么就攤上這事』粒” “怎么了幌缝?”我有些...
    開(kāi)封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)诫欠。 經(jīng)常有香客問(wèn)我涵卵,道長(zhǎng),這世上最難降的妖魔是什么荒叼? 我笑而不...
    開(kāi)封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任轿偎,我火速辦了婚禮,結(jié)果婚禮上被廓,老公的妹妹穿的比我還像新娘坏晦。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布昆婿。 她就那樣靜靜地躺著球碉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仓蛆。 梳的紋絲不亂的頭發(fā)上睁冬,一...
    開(kāi)封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音看疙,去河邊找鬼豆拨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛能庆,可吹牛的內(nèi)容都是我干的施禾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼搁胆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼弥搞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起渠旁,我...
    開(kāi)封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拓巧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后一死,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肛度,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年投慈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了承耿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伪煤,死狀恐怖加袋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抱既,我是刑警寧澤职烧,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站防泵,受9級(jí)特大地震影響蚀之,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捷泞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一足删、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锁右,春花似錦失受、人聲如沸讶泰。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)痪署。三九已至,卻和暖如春兄旬,著一層夾襖步出監(jiān)牢的瞬間狼犯,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工辖试, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辜王,地道東北人劈狐。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓罐孝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親肥缔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子莲兢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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