# 1、初始化Master
Kubeadm已經被安裝到這個節點上了。這個安裝包對Ubuntu16.04+,Centos7或HypriotOS v1.01+可用。
初始化集群的第一階段就是啟動master節點。master節點是負責運行控制平臺(control plane)組件,etcd和API server的。客戶端通過Master API來調度工作負載管理集群狀態。
## Task
下面的命令通過一個已知的token來初始化集群,以簡化以下步驟。
```
kubeadm init --token=102952.1a7dd4cc8d1f4cc5 --kubernetes-version $(kubeadm version -o short)
```
在生產中,建議您排除這個token,因為kubeadm會代表你生成一個。
為了管理這個K8s集群,需要客戶端配置和證書。這個配置在kubeadm初始化集群的時候會自動生成。下面的命令拷貝配置到用戶的家目錄并且設置這個環境變量以便使用命令行工具(CLI)。
```
sudo cp /etc/kubernetes/admin.conf $HOME/
sudo chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf
```
# 2、部署容器網絡接口(CNI)
CNI定義了如何連接不同的節點和對應的工作負載。這里有多個網絡插件可用。
Task
在這節中我們將會使用WeaveWorks,對應的部署定義文件在目錄
(這一步實踐中發現 文件名叫/opt/weave-kube.yaml)
```
cat /opt/weave-kube.yml
```
使用kubectl apply命令進行部署
```
kubectl apply -f /opt/weave-kube.yml
```
Weave將會部署一系列的Pods在集群中。查看部署狀態可使用命令
```
kubectl get pod -n kube-system
```
當部署Weave在你的集群中,訪問 [https://www.weave.works/docs/net/latest/kube-addon](https://www.weave.works/docs/net/latest/kube-addon) 獲取更多詳細信息。
3、加入集群
一旦Master和CNI已經被初始化了,其他的節點只要他們使用正確的token就可以加入集群。使用命令查看這個token:
```
kubeadm token list
````
## Task
在第二個節點上,運行下面的命令加入集群通過使用主節點的IP地址
```
kubeadm join --discovery-token-unsafe-skip-ca-verification --token=102952 .1a7dd4cc8d1f4cc5 172.17.0.51:6443
```
這是主程序初始化后提供的相同命令。
**--discovery-token-unsafe-skip-ca-verification** 是用來跳過Discovery Token驗證的。由于這個token是動態生成的,所以我們在這步不能包含它。當我們在生產中,使用kubeadm init提供的token。
# 4、查看節點
集群現在已經被初始化了。Master節點會管理這個集群,同時我們的一個工作節點將會運行我們的容器負載。
## Task
K8s CLI,就是kubectl,現在可以使用配置來訪問集群了。例如,下面的命令將會返回我們集群中的這兩個節點。
```
kubectl get nodes
```
# 5、部署Pod
集群中的這兩個節點現在應該是Ready的狀態。這代表我們的部署可以被調度和啟動了。
使用Kubectl,可以部署pods。每個節點執行工作負載的命令總是有Master發出。
下面的命令創建一個基于Docker鏡像katacoda/docker-http-server的pod。
```
kubectl create deployment http --image=katacoda/docker-http-server:latest
```
Pod創建的狀態可以使用命令查看:
```
kubectl get pods
```
一旦運行,你可以查看Docker容器在節點的運行情況。
```
docker ps | grep docker-http-server
```
# 6、部署Dashboard
K8s有一個基于Web的Dashboard UI,可視化展示集群。
## Task
部署dashboard使用下面的命令:
```
kubectl apply -f dashboard.yaml
```
dashboard 是被部署到kube-system命名空間下的,查看部署狀態使用命令:
```
kubectl get pods -n kube-system
```
登錄時需要一個ServiceAccount。一個ClusterRoleBinding被用來分配一個新的ServiceAccount(admin-user)給集群管理員角色。
```
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
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
EOF
```
這意味著他們可以控制K8s的各個方面。通過ClusterRoleBinding和RBAC(基于角色的訪問控制),根據安全需求不同層次的權限可以被定義了。為Dashboard創建一個用戶的更多信息可以查詢Dashboard文檔。
一旦ServiceAccount被創建了,登錄的token可以找到:
```
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
```
當dashboard被部署好了,他使用外部IP綁定到8443端口的Service上。dashboard在集群外就可以被訪問到[https://2886795330-8443-elsy02.environments.katacoda.com/](https://2886795330-8443-elsy02.environments.katacoda.com/)
使用admin-user的token來訪問dashboard。
在生產中,不是使用外部IP,更推薦使用kubectl proxy來訪問dashboard,查看更多詳細信息訪問[https://github.com/kubernetes/dashboard](https://github.com/kubernetes/dashboard).
- 前言
- 安裝minikube
- 啟動一個單節點的Kubernetes集群
- 啟動一個多節點的集群使用kubeadm
- 使用kubectl部署容器
- 使用YAML部署容器
- 在K8s上部署Guestbook(留言簿)示例
- K8s網絡介紹
- 創建Ingress路由
- Liveness(存活探針)、Readiness(就緒探針)和健康檢查
- 使用CRI-O和kubeadm開始
- 在K8s上運行一個有狀態服務
- 管理K8s中的秘鑰和密碼
- 使用Kompose部署Docker Compose文件
- 在Kubernates上從源代碼部署一個服務
- 使用Heptio Velero備份和恢復
- Helm包管理器
- 基本的K8s的可觀察性(監控)
- 使用EFK記錄日志
- 在K8s上安裝Weave Scope