再見命令行!K8S傻瓜式安裝,圖形化管理真香!
#K8S系列 4
之前我們一直都是使用命令行來管理K8S的,這種做法雖然對程序員來說看起來很炫酷,但有時候用起來還是挺麻煩的。今天我們來介紹一個K8S可視化管理工具Rancher,使用它可以大大減少我們管理K8S的工作量,希望對大家有所幫助!
Rancher簡介
Rancher是為使用容器的公司打造的容器管理平台。Rancher簡化了使用K8S的流程,開發者可以隨處運行K8S,滿足IT需求規范,賦能DevOps團隊。
Docker安裝
雖然Rancher的安裝方法有好幾種,但是使用Docker來安裝無疑是最簡單!沒有安裝Docker的朋友可以先安裝下。
- 安裝
yum-utils
:
yum install -y yum-utils device-mapper-persistent-data lvm2
- 為yum源添加docker倉庫位置:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安裝Docker:
yum install docker-ce
- 啟動Docker:
systemctl start docker
Rancher安裝
安裝完Docker之后,我們就可以開始安裝Rancher了。Rancher已經內置K8S,無需再額外安裝。就像我們安裝好Minikube一樣,K8S直接就內置了。
- 首先下載Rancher鏡像;
docker pull rancher/rancher:v2.5-head
- 下載完成后運行Rancher容器,Rancher運行起來有點慢需要等待幾分鍾:
docker run -p 80:80 -p 443:443 --name rancher \
--privileged \
--restart=unless-stopped \
-d rancher/rancher:v2.5-head
- 運行完成后就可以訪問Rancher的主頁了,第一次需要設置管理員賬號密碼,訪問地址:https://192.168.5.46
- 設置下Rancher的
Server URL
,一個其他Node都可以訪問到的地址,如果我們要安裝其他Node的話需要用到它;
Rancher使用
我們首先來簡單使用下Rancher。
- 在首頁我們可以直接查看所有集群,當前我們只有安裝了Rancher的集群;
- 點擊集群名稱可以查看集群狀態信息,也可以點擊右上角的按鈕來執行
kubectl
命令;
- 點擊儀表盤按鈕,我們可以查看集群的Dashboard,這里可以查看的內容就豐富多了,Deployment、Service、Pod信息都可以查看到了。
Rancher實戰
之前我們都是使用命令行的形式操作K8S,這次我們使用圖形化界面試試。還是以部署SpringBoot應用為例,不過先得部署個MySQL。
部署MySQL
- 首先我們以
yaml
的形式創建Deployment,操作路徑為Deployments->創建->以YAML文件編輯
;
- Deployment的
yaml
內容如下,注意添加namespace: default
這行,否則會無法創建;
apiVersion: apps/v1
kind: Deployment
metadata:
# 指定Deployment的名稱
name: mysql-deployment
# 指定Deployment的空間
namespace: default
# 指定Deployment的標簽
labels:
app: mysql
spec:
# 指定創建的Pod副本數量
replicas: 1
# 定義如何查找要管理的Pod
selector:
# 管理標簽app為mysql的Pod
matchLabels:
app: mysql
# 指定創建Pod的模板
template:
metadata:
# 給Pod打上app:mysql標簽
labels:
app: mysql
# Pod的模板規約
spec:
containers:
- name: mysql
# 指定容器鏡像
image: mysql:5.7
# 指定開放的端口
ports:
- containerPort: 3306
# 設置環境變量
env:
- name: MYSQL_ROOT_PASSWORD
value: root
# 使用存儲卷
volumeMounts:
# 將存儲卷掛載到容器內部路徑
- mountPath: /var/log/mysql
name: log-volume
- mountPath: /var/lib/mysql
name: data-volume
- mountPath: /etc/mysql
name: conf-volume
# 定義存儲卷
volumes:
- name: log-volume
# hostPath類型存儲卷在宿主機上的路徑
hostPath:
path: /home/docker/mydata/mysql/log
# 當目錄不存在時創建
type: DirectoryOrCreate
- name: data-volume
hostPath:
path: /home/docker/mydata/mysql/data
type: DirectoryOrCreate
- name: conf-volume
hostPath:
path: /home/docker/mydata/mysql/conf
type: DirectoryOrCreate
- 其實我們也可以通過頁面來配置Deployment的屬性,如果你對
yaml
中的配置不太熟悉,可以在頁面中修改屬性並對照下,比如hostPath.type
這個屬性,一看就知道有哪些了;
- 之后以
yaml
的形式創建Service,操作路徑為Services->創建->節點端口->以YAML文件編輯
;
- Service的
yaml
內容如下,namespace
屬性不能少;
apiVersion: v1
kind: Service
metadata:
# 定義空間
namespace: default
# 定義服務名稱,其他Pod可以通過服務名稱作為域名進行訪問
name: mysql-service
spec:
# 指定服務類型,通過Node上的靜態端口暴露服務
type: NodePort
# 管理標簽app為mysql的Pod
selector:
app: mysql
ports:
- name: http
protocol: TCP
port: 3306
targetPort: 3306
# Node上的靜態端口
nodePort: 30306
- 部署完成后需要新建
mall
數據庫,並導入相關表,表地址:https://github.com/macrozheng/mall-learning/blob/master/document/sql/mall.sql - 這里有個比較簡單的方法來導入數據庫,通過Navicat創建連接,先配置一個SSH通道;
- 接下來要獲得Rancher容器運行的IP地址(在Minikube中我們使用的使用Minikube的地址);
[root@linux-local ~]# docker inspect rancher |grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
- 之后我們就可以像在Linux服務器上訪問數據庫一樣訪問Rancher中的數據庫了,直接添加Rancher的IP和數據庫端口即可。
部署SpringBoot應用
- 以
yaml
的形式創建SpringBoot應用的Deployment,操作路徑為Deployments->創建->以YAML文件編輯
,配置信息如下;
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: default
name: mall-tiny-fabric-deployment
labels:
app: mall-tiny-fabric
spec:
replicas: 1
selector:
matchLabels:
app: mall-tiny-fabric
template:
metadata:
labels:
app: mall-tiny-fabric
spec:
containers:
- name: mall-tiny-fabric
# 指定Docker Hub中的鏡像地址
image: macrodocker/mall-tiny-fabric:0.0.1-SNAPSHOT
ports:
- containerPort: 8080
env:
# 指定數據庫連接地址
- name: spring.datasource.url
value: jdbc:mysql://mysql-service:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
# 指定日志文件路徑
- name: logging.path
value: /var/logs
volumeMounts:
- mountPath: /var/logs
name: log-volume
volumes:
- name: log-volume
hostPath:
path: /home/docker/mydata/app/mall-tiny-fabric/logs
type: DirectoryOrCreate
- 以
yaml
的形式創建Service,操作路徑為Services->創建->節點端口->以YAML文件編輯
,配置信息如下;
apiVersion: v1
kind: Service
metadata:
namespace: default
name: mall-tiny-fabric-service
spec:
type: NodePort
selector:
app: mall-tiny-fabric
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 8080
# Node上的靜態端口
nodePort: 30180
- 創建成功后,在Deployments標簽中,我們可以發現實例已經就緒了。
外部訪問應用
依然使用Nginx反向代理的方式來訪問SpringBoot應用。
- 由於Rancher服務已經占用了
80
端口,Nginx服務只能重新換個端口了,這里運行在2080
端口上;
docker run -p 2080:2080 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10
- 創建完Nginx容器后,添加配置文件
mall-tiny-rancher.conf
,將mall-tiny.macrozheng.com
域名的訪問反向代理到K8S中的SpringBoot應用中去;
server {
listen 2080;
server_name mall-tiny.macrozheng.com; #修改域名
location / {
proxy_set_header Host $host:$server_port;
proxy_pass http://172.17.0.3:30180; #修改為代理服務地址
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
- 再修改訪問Linux服務器的本機host文件,添加如下記錄;
192.168.5.46 mall-tiny.macrozheng.com
- 之后即可直接在本機上訪問K8S上的SpringBoot應用了,訪問地址:http://mall-tiny.macrozheng.com:2080/swagger-ui.html
總結
使用Rancher可視化管理K8S還真是簡單,大大降低了K8S的部署和管理難度。一個Docker命令即可完成部署,可視化界面可以查看應用運行的各種狀態。K8S腳本輕松執行,不會寫腳本的圖形化界面設置下也能搞定。總結一句:真香!
都看到這了,確定不來個點贊
,在看
鼓勵下么?這將是我創造更多優質文章的最大動力!
參考資料
Rancher官方文檔:https://docs.rancher.cn/rancher2/
項目源碼地址
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-fabric