日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

近期由于工作原因,在項目支持的過程中,進行了一次K8S的基礎環境部署,云平臺一直是公司的重要底座,而我由于一系列原因,一直沒有親自嘗試,通過本次的機會,讓我重新做了一遍,也找到了和以前部署傳統環境一樣的感覺,雖然還有些生疏和不解,但是邁出了這一步,也算是深入學習的開始。

環境部署是作為公司技術人員,必須要掌握的,我們的產品都是基于這個基本條件下進行搭建使用的,因此對于環境的了解,原理的學習,對于我們后續問題排查,產品問題定位都是有所幫助的。

集群架構

K8S云平臺部署過程說明

 

其核心思想是讓 K8S master 節點中的各類組件具備高可用性,消除單點故障

1.kube-apiserver:對外暴露了 K8S API,是整個集群的訪問入口。由于 apiserver 本身無狀態,可以通過啟動多個實例并結合負載均衡器實現高可用。

2.etcd:用于存儲 K8S 集群的網絡配置和對象的狀態信息,是整個集群的數據中心。可以通過啟動奇數個 etcd 實例建立一個冗余的,可靠的數據存儲層。

3.kube-scheduler:為新創建的 pod 選擇一個供他們運行的節點。一個集群只能有一個活躍的 kube-scheduler 實例,可以同時啟動多個 kube-scheduler 并利用領導者選舉功能實現高可用。

4.kube-controller-manager:集群內部的管理控制中心。一個集群只能有一個活躍的 kube-controller-manager 實例,可以同時啟動多個 kube-controller-manager 并利用領導者選舉功能實現高可用。

另外,構建集群時還需要注意下列問題

1)節點上 K8S 進程的可靠性。需要讓 kubelet、kube-scheduler、kube-controller-manager 等進程在出現故障后能自動重啟。

2)為 worker node 中的非 pod 進程預留資源,防止他們將與 pod 爭奪資源導致節點資源短缺。

部署架構

K8S云平臺部署過程說明

 

目前提供了5臺服務器,供開發和測試環境使用,具體分配情況已經使用情況如如下:

K8S云平臺部署過程說明

 

環境準備

進行配置前一些必要內容的處理,包括主機名的修改,網絡調整、以及系統配置、安全策略等的調整,保證后續安裝過程中的順利進行

1.協調虛擬IP

部署高可用環境,需要兩個虛擬IP的支持,一個用作內部集群的使用,另一個是用作外部集群使用,因此在與客戶交互之初,就要協調好虛擬IP的網絡情況,以便后續我們可以直接使用。

我們這邊拿到的兩個IP分別為122和123,整理我用122作為了內部集群,123為外部的集群。

2.修改主機名稱

設置主機名,添加主機名與IP對應關系,如下:

K8S云平臺部署過程說明

 

修改5臺虛擬機的hosts文件:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

3.修改安全策略

安全策略的處理包括兩個位置,一個是關閉selinux,一個是調整防火墻的策略,保證系統訪問安全,同時保證后續部署過程中不會受到安全限制。

> > > > 關閉selinux

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

> > > > 防火墻處理

調整防火墻的端口,如下:

K8S云平臺部署過程說明

 

防火墻白名單添加,如下:

K8S云平臺部署過程說明

 

上述調整完成之后,將防火墻進行重啟:

K8S云平臺部署過程說明

 

4.修改網絡映射

將橋接的IPv4流量傳遞到iptables的鏈:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

添加完畢后執行生效,如下:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

5.其他系統配置

調整關閉swap,方法如下:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

同時調整時間同步,啟動chronyd系統服務(需要檢查客戶給出的服務器時間是否一致,不一致要進行調整),方法如下:

K8S云平臺部署過程說明

 

外圍部署

針對不是容器里面處理的產品,我們要進行部署,因為UMC產品是需要部署到容器外的,所以支持UMC的相關中間件也是要部署到環境上的,包括redis、Nginx以及keepalived

1.redis部署

> > > > 前置條件

1.更新linux自帶的gcc 與make。

K8S云平臺部署過程說明

 

安裝完成后會有提示“完畢!”并自動返回到命令行。

K8S云平臺部署過程說明

 

2.如果wget提示無此命令,安裝wget。

1)檢查wget是否安裝:

K8S云平臺部署過程說明

 

如下顯示則已經安裝:

K8S云平臺部署過程說明

 

如果沒有顯示則表示沒有安裝,需要通過以下命令安裝;

K8S云平臺部署過程說明

 

> > > > 安裝步驟

安裝命令如下:

K8S云平臺部署過程說明

 

注意:其他服務器安裝方式和這個相同

> > > > 配置Redis

1.在server1機器上 /usr/local/redis-5.0.4 目錄下創建 redis_cluster 目錄。

命令如下:

K8S云平臺部署過程說明

 

2.在 redis_cluster 目錄下,創建名為7000、7001的目錄,并將 redis.conf 拷貝到這三個目錄中。

命令如下:

K8S云平臺部署過程說明

 

上方使用的是絕對路徑進行復制,也可使用相對路徑進行復制命令(需要在新建的redis_cluster目錄下進行操作)如下:

K8S云平臺部署過程說明

 

3.分別修改這三個配置文件,修改如下內容。

注意備份:cp
/usr/local/redis-5.0.4/redis_cluster/7000/redis.conf /usr/local/redis-5.0.4/redis_cluster/7000/redis.conf.bak

K8S云平臺部署過程說明

 

注意:其他服務器于此部署類似

> > > > 啟動Redis

全部修改完畢后,在第一臺機器上執行,啟用Redis節點,以下命令:

K8S云平臺部署過程說明

 

注意:如果關閉xshell后redis進程停止了,則用下命命令啟動

K8S云平臺部署過程說明

 

第二臺機器上執行,啟用Redis節點,以下命令:

K8S云平臺部署過程說明

 

第三臺機器上執行,啟用Redis節點,以下命令:

K8S云平臺部署過程說明

 

> > > > Redis集群

在server1上執行。

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

> > > > Redis驗證

server1執行:

K8S云平臺部署過程說明

 

之后左側變成“XXX.XXX.X.241:7000>”表示進入了Redis的節點之后:

K8S云平臺部署過程說明

 

回顯顯示設置值成功:

同樣在server2執行。

K8S云平臺部署過程說明

 

查看Redis中的信息。

K8S云平臺部署過程說明

 

同時可以通過確認集群信息也可以在這里執行:

cluster info //查看集群信息。

K8S云平臺部署過程說明

 

cluster nodes //查看節點信息。

K8S云平臺部署過程說明

 

如果集群報錯,可以通過在每個節點下做以下兩個命令;然后重新創建集群。

flushall //清空

cluster reset //重置集群

2.nginx部署

> > > > 前置條件

Nginx需要很多前置包,所以在安裝nginx前需要更新前置安裝包。

K8S云平臺部署過程說明

 

> > > > 步驟說明

1.將nginx安裝包上傳到,/usr/local目錄中,如下:

K8S云平臺部署過程說明

 

2.解壓這三個安裝包:

K8S云平臺部署過程說明

 

3.接著進入 nginx-1.14.2目錄中;

K8S云平臺部署過程說明

 

進行編譯安裝:

K8S云平臺部署過程說明

 

編譯:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

這樣代表nginx已經編譯安裝完成。

可以通過以下命令檢測Nginx是否安裝完成:

K8S云平臺部署過程說明

 

> > > > 啟動nginx

K8S云平臺部署過程說明

 

重啟命令:

K8S云平臺部署過程說明

 

3.keepalived部署

> > > > 安裝步驟

1.通過以下命令安裝Keepalived。

K8S云平臺部署過程說明

 

2.設置為系統服務。

K8S云平臺部署過程說明

 

修改keepalived配置,主從機不同的地方通過黃色高亮顯示:

K8S云平臺部署過程說明

 

注意備份:cp
/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

根據下文進行配置:

K8S云平臺部署過程說明

 

注意:5臺都要部署,分為兩組,一組為master1、master2、master3組成的一個虛擬IP,一組是由worker1、woeker2組成的一個虛擬IP

> > > > 啟停服務

開啟:systemctl start keepalived.service。

K8S云平臺部署過程說明

 

軟件安裝

軟件安裝部分,特指部署K8S所涉及的相關軟件內容,通過部署這些軟件內容,實現K8S的功能建立實現

1.安裝haproxy

1.安裝。

K8S云平臺部署過程說明

 

2.修改haproxy配置。

黃色:服務器機器名

綠色:服務器ip

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

3.開機默認啟動haproxy,開啟服務。

K8S云平臺部署過程說明

 

4.檢查服務端口情況。

K8S云平臺部署過程說明

 

查看haproxy狀態:

K8S云平臺部署過程說明

 

注意:如果出現啟動失敗情況,顯示不能綁定IP,系統文件處理添加如下

K8S云平臺部署過程說明

 

注意:所有master服務器都要進行部署配置

2.安裝Docker

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

注意:所有服務器都要進行部署

3.添加阿里云UUM軟件源

在/etc/yum.repos.d目錄下vi kubernetes.repo

復制如下代碼直接執行即可。

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

注意:所有服務器都要安裝

4.安裝kubeadm、kubelet、kubectl

> > > > 安裝方法

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

5.修改Cgroup Driver

修改cgroup driver是為了消除初始化集群時提示的告警:

K8S云平臺部署過程說明

 

查看:

docker info | grep Cgroup

K8S云平臺部署過程說明

 

編輯service文件:

K8S云平臺部署過程說明

 

追加下方紅色字體代碼:

K8S云平臺部署過程說明

 

重新加載docker:

K8S云平臺部署過程說明

 

再次查看:

docker info | grep Cgroup

K8S云平臺部署過程說明

 

集群部署

以下內容主要就是針對master和worker的加入,構建內部集群。

1.部署Master

在master1上,準備集群配置文件,在/opt目錄下創建kubeadm-config.yaml。

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

1.kubernetes拉取鏡像。

K8S云平臺部署過程說明

 

注意:如果服務器斷網,需要提前加載鏡像包,上傳服務器之后,通過

K8S云平臺部署過程說明

 

的方式加載鏡像,鏡像列表如下(可以通過:docker images命令查詢)。

K8S云平臺部署過程說明

 

2.執行節點初始化。

K8S云平臺部署過程說明

 

3.Master初始化完畢后最下面這個必須記錄下來,后面node服務器加入需要用到。

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

按提示執行命令:

K8S云平臺部署過程說明

 

4.查看:

kubectl get nodes

K8S云平臺部署過程說明

 

kubectl get pods -n kube-system

K8S云平臺部署過程說明

 

注意:node現在是NotReady狀態,pod中coreDNS是Pending狀態,是因為CNI網絡插件未安裝,繼續以下步驟

2.CNI網絡插件

安裝flannel:

K8S云平臺部署過程說明

 

安裝結果:

K8S云平臺部署過程說明

 

查看pods:

kubectl get pods -n kube-system

K8S云平臺部署過程說明

 

如果網絡不通,使用
flanneld-v0.12.0-amd64.docker手動在所有節點安裝:

K8S云平臺部署過程說明

 

安裝所需要的文件如下:

K8S云平臺部署過程說明

 

3.加入master節點

在master2和master3上執行,向集群添加新master節點,執行在kubeadm init輸出的kubeadm join命令:這個在master init初始化時會有提示,更換為自己的IP和token。

K8S云平臺部署過程說明

 

查看:

K8S云平臺部署過程說明

 

可以看到,集群中已經有3臺master節點了。

4.加入node節點

在woker1和worker2執行,向集群添加新節點,執行在kubeadm init輸出的kubeadm join命令:這個在master init初始化時會有提示,更換為自己的IP和token。

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

到master節點查看node狀態,都顯示ready:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

5.配置Ingress-nginx

> > > > 鏡像上傳

把nginx-ingress.tar上傳到各個master上,路徑自己能找到就行(如果下面的mandatory.yaml里配置指定master,這里可以只放到指定的master就可以),導入鏡像:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

> > > > YAML修改

1)編輯添加212行,表示使用主機網絡。

hostNetwork: true

K8S云平臺部署過程說明

 

關于上面yaml文件中寫入的“hostNetwork: true”具體解釋:如果添加了此字段,意味著pod中運行的應用可以直接使用node節點端口,這樣node節點主機所在網絡的其他主機,就可以通過訪問該端口來訪問此應用。(類似于docker映射到宿主機的端口。)

2)編輯221行,修改鏡像版本,改成上面導入的0.29.0。

K8S云平臺部署過程說明

 

上傳到master服務器,路徑自己能找到就行。

3)設置pod時間,通常情況云服務器的時區為世界標準時間,和中國標準時間相差8個小時。

加入紅框部分,如下圖:

K8S云平臺部署過程說明

 

參考模板文件如下:

K8S云平臺部署過程說明

 

> > > > 允許master節點部署pod

因為ingress-controller我們需要部署到master服務器上,而默認master不允許部署pod,所以使用如下方法解決:

K8S云平臺部署過程說明

 

輸出如下:

node “K8S” untainted

輸出error: taint “
node-role.kubernetes.io/master:” not found錯誤忽略。

> > > > 執行mandatory.yaml

kubectl Apply -f mandatory.yaml

K8S云平臺部署過程說明

 

> > > > 確認Ingress-nginx容器

確認Ingress-nginx容器正常運行:

kubectl get pod -n ingress-nginx -o wide

K8S云平臺部署過程說明

 

> > > > 開啟指定變量

上傳文件configmap.yaml,然后調整相應參數,在該目錄下執行以下命令

kubectl apply -f configmap.yaml。

K8S云平臺部署過程說明

 

1.內部ingress-nginx,data參數說明:

1)proxy-add-original-uri-header: "true"

作用:獲取到ingress的完整路徑。

2)enable-underscores-in-headers: "true"

作用:允許ingress支持自定義變量。

3)use-forwarded-headers: "true"

作用:獲取X-Forwarded-Proto,如https。

6.drdb高可用

> > > > 安裝相關支撐程序

在master1和master2安裝


http://oss.linbit.com/drbd 下載drbd-9.0.19-1.tar.gz、drbd-utils-9.12.1.tar.gz,再將drbd-9.0.19-1.tar.gz、drbd-utils-9.12.2.tar.gz上傳到虛擬機/usr/local目錄,再裝一些支撐軟件。

K8S云平臺部署過程說明

 

安裝po4a-translate,編譯drbd-utils的rpm包的時候,需要有命令【po4a-translate】的支持,但是系統上并沒有這個命令。

K8S云平臺部署過程說明

 

> > > > 編譯drbd-utils

K8S云平臺部署過程說明

 

> > > > 編譯drbd

K8S云平臺部署過程說明

 

> > > > 安裝drbd模塊

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

> > > > 查看drbd版本及路徑

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

> > > > 新磁盤分區

K8S云平臺部署過程說明

 

> > > > 配置drbd資源文件

vi /etc/drbd.d/drbd.res

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

> > > > 配置資源

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

> > > > 設置主節點

強制設置為主節點,在任一節點上執行:

K8S云平臺部署過程說明

 

再次查看:

drbdadm status

K8S云平臺部署過程說明

 

看到此時數據的狀態為UpToDate(數據正在同步,單未完全同步),且已經同步42.28

主:

K8S云平臺部署過程說明

 

副:

K8S云平臺部署過程說明

 

> > > > 格式化新分區并掛載

K8S云平臺部署過程說明

 

查看:

lsblk

K8S云平臺部署過程說明

 

> > > > 設置drbd開機啟動

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

7.NFS配置

針對NFS進行服務端和客戶端的處理,通過客戶端和服務端的關系,保證客戶端可以訪問服務端

> > > > NFS服務端配置

1.安裝NFS和rpc:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

2.啟動服務和設置開啟啟動:

K8S云平臺部署過程說明

 

3.建立共享文件夾:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

4.設置共享:

K8S云平臺部署過程說明

 

5.啟動NFS:

K8S云平臺部署過程說明

 

6.查看2049端口是否打開:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

> > > > NFS客戶端配置

1.在worker1和worker2也安裝nfs,確保每個節點安裝nfs(客戶端上不需要啟動nfs服務,只是為了使用showmount工具):

K8S云平臺部署過程說明

 

2.查看掛載配置:

K8S云平臺部署過程說明

 

3.在worker1上測試掛載是否成功:

K8S云平臺部署過程說明

 

掛載失敗提示如下:

K8S云平臺部署過程說明

 

取消掛載:

K8S云平臺部署過程說明

 

4.在客戶端創建目錄,并掛載共享目錄:

K8S云平臺部署過程說明

 

5.檢查(有就行,和順序無關):

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

8.鏡像庫搭建

鏡像庫主要進行存儲鏡像信息,供UMC后續使用。

> > > > 搭建鏡像庫

1.將registry鏡像pull下來。

K8S云平臺部署過程說明

 

2.啟動(全部復制)。

K8S云平臺部署過程說明

 

> > > > 上傳鏡像

實例:

在可以找到的位置上傳基礎鏡像,然后通過本地上傳命令進行鏡像加載。

K8S云平臺部署過程說明

 

鏡像推送到

驗證:

1.可以拉取一個busybox鏡像(因為體積小),進行實驗。

K8S云平臺部署過程說明

 

2.打標,準備發布到Registry中。

K8S云平臺部署過程說明

 

3.推送給Registry。

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

注意:如果上傳、獲取本地鏡像會提示如下報錯,需要設置daemon.json文件

設置daemon.json文件,

其他節點獲取本地鏡像會提示:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

由于Registry為了安全性考慮,默認是需要https證書支持的,但是我們可以通過一個簡單的辦法解決:

注:<ip>:Registry的機器ip地址,在安裝registry的節點和客戶端需要訪問私有Registry的節點都需要執行此步操作

K8S云平臺部署過程說明

 

> > > > 查看鏡像

1.查看倉庫有哪些鏡像,運行如下命令:

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

查看具體鏡像標簽(黃色是鏡像名):

K8S云平臺部署過程說明

 


K8S云平臺部署過程說明

 

> > > > 拉取鏡像

拉取鏡像:

K8S云平臺部署過程說明

 

> > > > 刪除鏡像

1.配置hosts映射:

K8S云平臺部署過程說明

 

2.下載:

K8S云平臺部署過程說明

 

3.查看:

K8S云平臺部署過程說明

 

4.授權:

K8S云平臺部署過程說明

 

5.查找備份路徑:

find / -name registry

K8S云平臺部署過程說明

 

如果沒有這個路徑,則是因為上傳沒有成功,不需要刪除。

6.設置鏡像倉庫的位置:

K8S云平臺部署過程說明

 

7.刪除:

K8S云平臺部署過程說明

 

8.重啟docker:

刪除鏡像之后要重啟docker,不然還是會出現相同鏡像push不成功的問題。

K8S云平臺部署過程說明

 

至此,K8S整體環境部署完畢。

心得體會

本次環境的部署相對來說還是比較順利,重要的一點就是隨著文檔體系的不斷完善,很多問題都得以規避,因此在按照公司提供的標準部署文檔來操作處理,問題也相對少了許多,大大的減少了自己研究處理的時間,自己也得以將大部分的時間用于了解和學習原理知識,由理解到部署,讓自己的認識更加深刻。

1.能力提升

之前自己一直沒有切實的部署過云平臺環境,對于其原理都是懵懵懂懂的,對于不同服務器怎么分配,分配好的服務器應該部署哪些東西,都是不了解的,因此就導致在實際使用過程中,也是屢屢出現問題,需要找同事協助解決,自己基本沒有能力去解決。但是通過本次的部署學習,讓我受益匪淺,對于哪些產品和軟件應該部署在哪,為什么部署到那,都有所了解。并且針對一些問題的處理和解決,也漸漸的學會了如何排查,然后怎么處理,并且針對重大問題,如何進行集群重置,然后重新部署,自己也嘗試了一下,總體來說,本次部署工作收獲滿滿。

2.自我總結

在云平臺部署的過程中也出現了一些問題,主要也是自己在部署過程中不夠仔細,拿來即用的原則不是可取的,因為每個人使用和理解都不一樣。因此,有的時候理解上有偏差,就導致后續一系列問題的出現,因此,通過理解然后去解讀,才能盡量減少這樣問題的出現,并且不管什么情況下,都要有對大局的把控意識,例如對于標準文檔,不應該拿過來就照著弄,而是應該整體看一下內容,把控整體的內容規劃,然后再去弄,這樣出現問題之后,相關聯的問題就都能通過文檔去定位,然后確認是什么問題,有針對性的去調整,避免遺漏,或知識獲取不全的問題。

3.深入思考

K8S的部署學習,是對云部署模式使用的一塊敲門磚,我們對于云的了解,以前都是聽說,而且感覺是高大上,遙不可及的,只有你真正的部署過,了解其中的原理了,你才能真實的感覺到,其實就哪些東西,所謂的云,也是離不開以前的部署模式的,只是使用的模式,以及使用的軟件有所變化,類比以前傳統環境部署的知識一樣是通用的,而且有類似的地方,通過這種類比學習的方式,很快就能掌握云部署的技巧。因此對于新鮮事物不要懼怕,要敢于嘗試,重在理解,只有這樣才能突破現象看本質,學習的更加扎實。

云平臺的使用已經成為一種趨勢,為了跟上時代的潮流、公司的腳步,我們應該將這種技能變成安身立命的本能,不僅僅是環境的部署上,還有環境的問題處理上,都要游刃有余,只有這樣,才能適應后續項目的任務,在客戶現場有更好的表現,給客戶帶來足夠的安心,保證項目的順利完成。

本文由@數通暢聯原創,歡迎轉發,僅供學習交流使用,引用請注明出處!謝謝~

分享到:
標簽:K8S
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定