(三)Docker、k8s使用初體驗及Dashboard避坑指南!!!

Table of Contents

Docker初體驗

查看版本

啓動實例

查看鏡像列表

容器實例查看

停止正在運行的容器

移除已創建的容器

Docker幫助

Kubernetes初體驗

Dashboard配置

授權配置

Token

Kubeconfig


哈嘍,各位小夥伴大家好,前兩節我們分別介紹了Docker和Kubernetes以及其安裝,那麼,如何來檢驗安裝是否成功呢?當然,最行之有效的方法就是使用一下啦,那麼,本節,我們就一起來體驗一下Docker和Kubernetes的初步使用吧。

特別聲明,本節的代碼中,形如> docker --version的是命令,以下的都是執行結果,而且//是我自輸入的註釋,請不要混淆!

 

Docker初體驗

上節課,我們在安裝完docker後,通過About查看了docker的基本信息,那麼本節,我們將學習用命令行來操作docker。

要注意,在進行操作前,一定要先運行Docker,就好比我們要開車一定要先讓車啓動,要不然,即使能看到一些參數,但也不能實際的上路行駛。這裏也是一樣的道理。(因此,假設以下都是正常情況)

 

查看版本

第一個就先查看版本吧,查看版本其實有2個相似的命令,但是查看的東西是不一樣的,因此需要注意一下,如下

查看docker引擎的版本(即docker的版本)

>docker --version

Docker version 19.03.8, build afacb8b

查看全部版本,可用於驗證是否開啓實驗功能(experimental CLI)

>docker version

Client: Docker Engine - Community  //client 相關信息
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b
 Built:             Wed Mar 11 01:23:10 2020
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Community    //server相關信息
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b
  Built:            Wed Mar 11 01:29:16 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

 

啓動實例

就像是我們學習一門新的語言時,總是習慣先寫HelloWorld一樣,我們也可以用Docker來打印我們的HelloWorld,不同的是,docker已經爲我們寫好了這個鏡像,而不需要我們手動編寫,我們只需輸入

>docker run hello-world
 
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world//拉取鏡像
0e03bdcc26d7: Pull complete                                                                                             
Digest: sha256:8e3114318a995a1ee497790535e7b88365222a21771ae7e53687ad76563e8e76
Status: Downloaded newer image for hello-world:latest
 
Hello from Docker!//執行結果
This message shows that your installation appears to be working correctly.//表明安裝成功

接下來,我們在來試着拉取一個名爲webserver的nginx web server鏡像

> docker run --detach --publish 80:80 --name webserver nginx

 Unable to find image 'nginx:latest' locally
 latest: Pulling from library/nginx

 fdd5d7827f33: Pull complete
 a3ed95caeb02: Pull complete
 716f7a5f3082: Pull complete
 7b10f03a0309: Pull complete
 Digest: sha256:f6a001272d5d324c4c9f3f183e1b69e9e0ff12debeb7a092730d638c33e0de3e
 Status: Downloaded newer image for nginx:latest
 dfe13c68b3b86f01951af617df02be4897184cbf7a8b4d5caf1c3c5bd3fc267f

啓動後,在瀏覽器中直接輸入http://localhost即可展示該nginx的起始頁

到這裏,我們已經拉取了2個鏡像,併成功運行了,那如何查看已有鏡像以及其狀態呢?

 

查看鏡像列表

顯示從DockerHub下載的鏡像

>docker image ls

REPOSITORY                                                       TAG                 IMAGE ID            CREATED             SIZE
nginx                                                            latest              602e111c06b6        3 hours ago         127MB
docker/desktop-storage-provisioner                               v1.0                605a0f683b7b        7 weeks ago         33.1MB
hello-world                                                      latest              bf756fb1ae65        3 months ago        13.3kB
k8s.gcr.io/kube-proxy                                            v1.15.5             cbd7f21fec99        6 months ago        82.4MB
k8s.gcr.io/kube-controller-manager                               v1.15.5             1399a72fa1a9        6 months ago        159MB
k8s.gcr.io/kube-apiserver                                        v1.15.5             e534b1952a0d        6 months ago        207MB
k8s.gcr.io/kube-scheduler                                        v1.15.5             fab2dded59dd        6 months ago        81.1MB
quay.io/kubernetes-ingress-controller/nginx-ingress-controller   0.26.1              29024c9c6e70        6 months ago        483MB
docker/kube-compose-controller                                   v0.4.23             a8c3d87a58e7        10 months ago       35.3MB
docker/kube-compose-api-server                                   v0.4.23             f3591b2cb223        10 months ago       49.9MB
k8s.gcr.io/coredns                                               1.3.1               eb516548c180        15 months ago       40.3MB
k8s.gcr.io/kubernetes-dashboard-amd64                            v1.10.1             f9aed6605b81        16 months ago       122MB
k8s.gcr.io/etcd                                                  3.3.10              2c4adeb21b4f        16 months ago       258MB
k8s.gcr.io/pause                                                 3.1                 da86e6ba6ca1        2 years ago         742kB

上述步驟中,鏡像拉取後成功運行,證明已經創建了容器實例,那如何查看容器實例呢?

 

容器實例查看

查看當前運行的容器實例

>docker container ls

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
afb71d7f2857        nginx               "nginx -g 'daemon of…"   16 minutes ago      Up 16 minutes       0.0.0.0:80->80/tcp   webserver

查看創建的全部容器實例,除了當前運行的,包括已退出的

>docker container ls --all
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                NAMES
e9af44f55863        hello-world         "/hello"                 28 seconds ago      Exited (0) 27 seconds ago                        bold_wilson
afb71d7f2857        nginx               "nginx -g 'daemon of…"   15 minutes ago      Up 15 minutes               0.0.0.0:80->80/tcp   webserver
939c9e97eba4        hello-world         "/hello"                 23 minutes ago      Exited (0) 23 minutes ago                        xenodochial_spence

 

停止正在運行的容器

>docker container stop webserver

webserver

移除已創建的容器

>docker container rm webserver bold_wilson xenodochial_spence
//這裏移除的容器名稱根據自己的事件情況而定,中間用空格隔開即可
webserver
bold_wilson
xenodochial_spence

這裏需要注意的是,若要移除容器,則當前容器必須是退出狀態,正在運行的容器是不會被移除的

 

Docker幫助

其實,對於docker的命令無需死記,一方面,我們可以根據推理,比如鏡像是docker image...,容器是docker container...,

另外,等不確定或者遇到不認識的命令的時候,這時候我們就可以通過--help命令來查看/查找具體定義,如

> docker --help
> docker container --help
> docker container ls --help
> docker run --help
//由於結果太長,這裏就只給出命令

 

Kubernetes初體驗

對於Kubernetes的管理,我們一般會通過啓用Dashboard,這是一個可視化的網頁,你可以理解成Kubernetes WebUI,下面,我們就來看一下如何啓用Dashboard吧。

Dashboard配置

Dashboard需要用到k8s.gcr.io/kubernetes-dashboard的鏡像,網絡上多半給出的地址是官方地址

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

但還是那個坑爹的原因,這裏導致這個源並不可用,以下是本人親測可用的地址,我們只需要直接在命令行執行以下命令即可

kubectl apply -f http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

//結果
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created

之後,我們可以通過命令kubectl get pods --all-namespaces檢測dashboard是否安裝成功

此時,我們可以通過啓動代理,然後我們即可通過本地訪問dashboard,

>kubectl proxy

Starting to serve on 127.0.0.1:8001

啓動後,我們即可通過以下地址來進行瀏覽器訪問

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

 

授權配置

從上圖可以看出,授權有2種方式,一種是通過Kubeconfig文件,另一種是Token,這裏我們分別講解一下吧。

 

Token

1.生成default Token

在powerShell裏輸入,注意是powerShell,不是命令行裏

$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
kubectl config set-credentials docker-desktop --token="${TOKEN}"
echo $TOKEN

結果如下,框中的即爲生成的Token

複製上圖中的Token,輸入到剛剛的授權頁面,則會進入到管理界面

2.自定義用戶生成Token

除了使用docker默認的配置生成token外,我們還可以通過自定義的方式來生成。具體操作如下:

特別提醒一下,以下創建的文件必須放在.kube同路徑下,否則在執行之後的命令時需要指明文件路徑

a.創建admin-user.yaml,用於創建服務賬號,內容如下

# admin-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

執行kubectl create命令

>kubectl create -f admin-user.yaml

serviceaccount/admin-user created

b.創建admin-user-role-binding.yaml,用於綁定角色,內容如下

# admin-user-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

執行kubectl create命令

>kubectl create -f admin-user-role-binding.yaml
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

c.獲取token

經過以上兩步之後,我們可以開始獲取token了,

仍然是在powershell中執行

$TOKEN=((kubectl -n kube-system describe secret admin-user | Select-String "token:") -split " +")[1]
kubectl config set-credentials admin-user --token="${TOKEN}"
echo $TOKEN

結果如下

PS C:\Users\29853> $TOKEN=((kubectl -n kube-system describe secret admin-user | Select-String "token:") -split " +")[1]
PS C:\Users\29853> kubectl config set-credentials admin-user --token="${TOKEN}"
User "admin-user" set.
PS C:\Users\29853> echo $TOKEN
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTg2MjhiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhMGI4NjI4OS04ZTA0LTRlNmItOTRlNi0zYTA4ODkyNGI2YTYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.VexslypiDXxB2bCDhFlsZtQOKKBqpXUx93PgzrsCyaqh9-Y8Wg2Z-NqB8wvvD-QZlz9m7KijGGRTyoECWa-GkQ08ftSlDK0pUwjeDiMVMzdiJQBqB4ZkpkMzZySaUk6v8vR-YByGi7S7SBOt4_Gbk3iC1MvsRJVKjaMlKmwyPjKW_Fus8z_OEVkw7AV_gZR26T-Wn_91H_CBQPe17IotJmbejnxXiiYK_TNCUrhBTgtm-i0iPzkHrty-jK01oVgghS69dgEiKYPtcdObv72gOTDR6wkmydX4V0vdH2QdF5myjSLE4l9lQIrFU4xXAwTRo7JoQF1tKN8OxNqWXKJSDg

輸入最後生成的token,仍然可以登錄成功。而且,會在config文件下生成對應的token

 

Kubeconfig

該方式的話,其實就是直接選中.kube/config文件即可,如圖

依舊可以成功登錄。

 

好了,到此,您就完成了Docker和Kubernetes的初體驗,其實,對於docker和Kubernetes涉及的東西是非常非常多的,到現在也只能說是配置好了可以進行學習的環境。對於Docker和Kubernetes一定要多練,最重要的是要明白其中的操作和原理,這樣才能不用死記硬背也能流暢的操作。


更多優質文章,請搜索公衆號 攻城獅客棧,或掃描下方二維碼

                                                      

讓我們一起變的更優秀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章