01 引子
鴿了好久了,終于又一次克服了拖延癥,決心寫點啥,起因也是因為最近剛好重做了系統,把win10從home版升級到了專業版,可以愉快的安裝docker destop 而不需要借助 docker toolbox了。 這個使用體驗的提升真的是很不錯。無論是配置,還是運行容器的可視化,還是一些輔助工具,真的友好了很多,降低了使用門檻。
02 Kubernetes
k8s 這個名字,起源于古希臘,是舵手的意思,所以它的 logo 即像一張漁網又像一個羅盤,谷歌選擇這個名字還有一個深意:既然docker把自己比作一只鯨魚,馱著集裝箱,在大海上遨游,google 就要用Kubernetes去掌握大航海時代的話語權,去捕獲和指引著這條鯨魚按照主人設定的路線去巡游。
K8s將集群中的機器劃分為一個Master節點和一群工作節點Node。Master節點上運行著集群管理相關的一組進程kube-apiserver、kube-controller-manager和kube-scheduler。這些進程自動化實現了整個集群的資源管理、Pod調度、彈性伸縮、安全控制、系統監控和糾錯等管理功能。
上圖可以看到如下組件,使用特別的圖標表示Service和Label:
Kubernetes Master
Master指的是集群控制節點。每個K8s集群里需要有一個Ms節點負責整個集群的管理和控制。Kubernetes Master提供集群的獨特視角,并且擁有一系列組件。
Node
節點(上圖橘色方框)是物理或者虛擬機器,作為Kubernetes worker,通常稱為Minion。每個節點都運行如下Kubernetes關鍵組件。
(1) Kubelet:與Master節點協作,是主節點的代理,負責Pod對應容器的創建,啟動,停止等任務。默認情況下Kubelet會向Master注冊自己。Kubelet定期向主機點匯報加入集群的Node的各類信息。
(2) Kube-proxy:Kubernetes Service使用其將鏈接路由到Pod,作為外部負載均衡器使用,在一定數量的Pod之間均衡流量。比如,對于負載均衡Web流量很有用。
(3) Docker或Rocket:Kubernetes使用的容器技術來創建容器。
Pod
Pod是K8s最重要也是最基礎的概念!每個Pod都有一個特殊的被稱為“根容器”的Pause容器,此容器與引入業務無關并且不易死亡。且以它的狀態代表整個容器組的狀態!Pause容器對應的鏡像屬于K8s平臺的一部分,除了Pause容器,每個Pod還包含一個或多個用戶業務容器。Pod其實有兩種類型:普通的Pod及靜態Pod(static Pod),static Pod并不存放在Kubemetes的eted存儲里,而是存放在某個具體的Node上的一個具體文件中,并且只在此Node上啟動運行。而普通的Pod一旦被創建,就會被放入到etcd中存儲,確后會被KubernetesMaster調度到某個具體的Node上并進行綁定(Binding),隨后該Pod被對應的Node上的kubelet進程實例化成一組相關的Docker容器并啟動起來。在默認情況下,當Pod里的某個容器停止時,Kubemetes會自動檢測到這個問題并且重新啟動這個Pod(重啟Podel)的所有容器),如果Pod所在的Node完機,則會將這個Node上的所有Pod重新調度到其他節點上。Pod(上圖綠色方框)安排在節點上,包含一組容器和卷。同一個Pod里的容器共享同一個網絡命名空間,可以使用localhost互相通信。
Endpoint(Pod IP + ContainerPort) pod ip:一個Pod里多個容器共享Pod IP地址。K8s要求底層網絡支持集群內任意兩個Pod之間的TCP/IP直接通信,使用虛擬二層網絡技術(Flannel(沒有接觸過 ),OpenvSwitch)實現。在Vmware中類似的二層交換技術是VSwitch,當然了,現在整個數據中心網絡二層逐步從vSwitch—>OpenvSwitch
Lable
Lable類似Docker中的tag,一個是對“特殊”鏡像、容器、卷組等各種資源做標記,一個是attach到各種諸如Node、Pod、Server、RC資源對象上。不同的是Lable是一對鍵值對!Lable類似Tag,可使用K8s專有的標簽選擇器(Label Selector)進行組合查詢。
Replication Controller
Replication Controller,簡稱RC,她用來干啥呢?就是通過她來實現Pod副本數量的自動控制!RC確保任意時間都有指定數量的Pod“副本”在運行。
如果為某個Pod創建了RC并且指定3個副本,它會創建3個Pod,并且持續監控它們。如果某個Pod不響應,那么Replication Controller會替換它,保持總數為3。如果之前不響應的Pod恢復了,現在就有4個Pod了,那么Replication Controller會將其中一個終止保持總數為3。如果在運行中將副本總數改為5,Replication Controller會立刻啟動2個新Pod,保證總數為5。還可以按照這樣的方式縮小Pod,這個特性在執行滾動升級時很有用。
注意:刪除RC,不會影響該RC已經創建好的Pod。在邏輯上Pod副本和RC是解耦和的!創建RC時,需要指定Pod模板(用來創建Pod副本的模板)和Label(RC需要監控的Pod標簽)。
由Replication Controller衍生出Deployment,與RC相似90%,目的是更好地解決Pod編排。暫時不討論。
Horizontal Pod Autoscaler,簡稱HPA,Pod橫向自動擴容智能控件。與RC,Deployment一樣,也屬于K8s的一種資源對象。她的實現原理是通過追蹤分析RC控制的所有目標Pod的負載變化情況,來確定是否針對性地調整目標Pod的副本數。
Service
微服務架構中的一個“微服務”,她是正真的新娘,而之前的Pod,RC等資源對象其實都是嫁衣。
每個Pod都會被分配一個單獨的IP地址,而且每個Pod都提供了一個獨立的Endpoint(Pod lP + ContainerPort)以被客戶端訪問,現在多個Pod副本組成了一個集群來提供服務,客戶端要想訪問集群,一般的做法是部署一個負載均衡器(軟件或硬件),為這組Pod開啟一個對外的服務端口如8000端口,并且將這些Pod的Endpoint列表加入8000端口的轉發列表中,客戶端就可以通過負載均衡器的對外IP地址 + 服務端口來訪問此服務,而客戶端的請求最后會被轉發到哪個Pod,則由負載均衡器的算法所決定。
K8s的server定義了一個服務的訪問入口地址,前端(Pod)通過入口地址訪問其背后的一組由Pod副本組成的集群實例,service與其后端Pod副本集群之間通過Label Selector 實現“無縫對接”。
03 Minikube
minikube相當于一個運行在本地的Kubernetes單節點,我們可以在里面創建Pods來創建對應的服務。
Minikube is a tool that makes it easy to run Kubernetes locally. Minikube runs a single-node Kubernetes cluster inside a VM on your laptop for users looking to try out Kubernetes or develop with it day-to-day
04 安裝
說的安裝,還得奉勸大家提前沐浴更衣,調整好心態。倒不是因為步驟有多難,多復雜,而是因為某些網站因為技術不成熟,你始終訪問不到,而焦躁。關于minikube,一些網上人說使用阿里的包,可能福報廠確實拉了分支,改了拉取鏡像的地址,但是他們并沒有提供編譯好的版本,所以使用官方的版本就好。https://github.com/kubernetes/minikube 。
另外,一定要注意使用release版本(我用1.9.2版),別下測試版,為什么這么提醒?反正我沒有因為版本問題,卡了2天,demo都沒跑出來。
kubectl 也從官方下載 https://kubernetes.io/docs/tasks/tools/install-kubectl/ 即可。
將兩個文件放到一個文件夾下,然后在環境變量里path一下
安裝docker 不是主要矛盾,大家自行搜一下,只要確認好環境,再次強調最好升級一下win10,這樣操作起來更方便一些,docker toolbox用起來真的不行。
在正式安裝之前,還需要設置一個虛擬交換機
接下來,就是安裝k8s環境了,記得使用管理員Prowshell
minikube start --image-mirror-country=cn --registry-mirror=https://registry.docker-cn.com --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --hyperv-virtual-switch="minikubaSwitch"
參數說明:
天朝專用參數
--image-mirror-country=cn
國內docker registry
--registry-mirror=https://registry.docker-cn.com
國內鏡像源
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
外部交換機
--hyperv-virtual-switch="minikubaSwitch"
接下來就是漫長的等待,安裝成功后,會多出一個minikube的虛擬機
重點來了啊,如果之前下載失敗了,到自己的用戶下面把這個.minikube文件夾刪除了,重新來一邊,如果還是不行,繼續刪了重來,不要問為什么,問就是上網需要科學。
接下來就需要部署 deployment
PS E:\devlop\envs\k8s\test1> kubectl create -f 1.yml
deployment.apps/datalookerserver created
使用下面的 yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: datalookerserver
spec:
selector:
matchLabels:
app: datalookerserver
replicas: 2
template:
metadata:
labels:
app: datalookerserver
spec:
containers:
- name: datalookerserver
image: nginx
# nginx
#datalooker-server:1.0-SNAPSHOT
imagePullPolicy: Always
ports:
- containerPort: 80
這里注意image屬性,還是使用公網的image,這樣比較容易通過,使用本地registry可能因為鏈路訪問問題,導致失敗,具體情況,可以異步到參考鏈接【2】,里面對這個問題有一個比較清楚的闡釋。
接下來,可以使用 kubectl get Pods -o wide 查看pod狀態
使用, kubectl describe pod datalookerserver-56dbc49bc8-6sdms可以查看具體pod的具體信息
接下來使用相同的指令,創建service
PS E:\devlop\envs\k8s\test1> kubectl create -f 2.yml
service/datalookerserver created
yml如下:
apiVersion: v1
kind: Service
metadata:
name: datalookerserver
spec:
ports:
- port: 9999 # 服務端口
protocol: TCP
targetPort: 80 # 容器端口
selector:
app: datalookerserver # 標簽選擇器,這里的app=web正是我們剛才建立app
使用 minikube dashboard 命令,可以打開網頁來對單機集群進行監控
現在,一個整體的簡單應用構建起來了,那么我們如何訪問呢?
還需要將端口映射出來,我們才能訪問
kubectl port-forward svc/datalookerserver 9999:9999
測試一下OK了
參考鏈接:
[1] https://www.jianshu.com/p/f4c2104ba90a
[2] https://hasura.io/blog/sharing-a-local-registry-for-minikube-37c7240d0615/
[3] https://www.javaroad.cn/questions/304667
[4] https://www.jianshu.com/p/7cc5f727c225
[5] https://zhuanlan.zhihu.com/p/88236691
北京時間9月17日,全球領先的軟件服務公司傲游發布旗下傲游云瀏覽器Windows Phone平臺2.0.1.1000版。新版瀏覽器全面支持WP8.1系統,內核升級到IE11,并對瀏覽器UI進行了重大調整。
點擊下載傲游瀏覽器:http://www.maxthon.cn/
全面兼容WP8.1系統
去年10月,傲游發布了旗下WP平臺瀏覽器。而在年初的微軟Build2014全球開發者大會上,微軟正式發布了Windows Phone 8.1。新系統加入了對日歷系統的改進和新的通知頁面等一系列新功能。傲游迅速針對WP8.1對旗下WP瀏覽器進行優化,新版瀏覽器實現了對WP8.1系統的全面兼容。
UI界面重大調整
新版傲游WP瀏覽器采用了精心設計的全新UI界面。整體視覺體驗更加簡潔清爽。瀏覽器左上角是個人賬號按鈕,右上角自左至右排列著快速訪問、聚合閱讀、網址導航和歷史4個按鈕。底端則是地址欄、新建磁貼、時光標簽和起始頁4個按鈕。其中,傲游首創的“時光標簽”功能已成功申請專利。此項新功能顛覆了傳統的多標簽模式,讓用戶在坐標軸式的橫縱選擇中更為流暢的完成對歷史標簽和并列標簽的實時切換。
新版傲游WP瀏覽器“快速訪問”的網址圖標采用單色背景和網站LOGO兩種形式,交替出現。用戶在添加快速訪問網站時可對圖標顏色進行設置,讓快速訪問標簽更加易于區分,頁面更加絢麗多彩。長按圖標還可以進行刪除、編輯等操作。
傲游WP瀏覽器“快速訪問”界面
“聚合閱讀”是傲游在旗下移動瀏覽器上推出的特色功能?!熬酆祥喿x”收錄了來自上百個網站的海量內容,將其按新聞、科技、娛樂、體育、生活等類別劃分,由用戶自主選擇訂閱。通過聚合閱讀,傲游移動瀏覽器為用戶提供了包括新聞資訊、雜志報道、潮流趨勢、生活服務等全方位、個性化閱讀解決方案,滿足各類用戶的移動閱讀需求。
傲游WP瀏覽器“聚合閱讀”界面
在“聚合閱讀”文章列表中打開一篇文章,可通過閱讀界面底端的3個按鈕進行“加為收藏”、“分享”、“夜間模式”操作,方便實用。
“聚合閱讀”文章界面
新版本傲游WP瀏覽器的“網址導航”界面和之前的版本相比更加簡潔,富有科技感。
傲游WP瀏覽器“網址導航”界面
內核升級至IE11
今年上半年,微軟宣布WP8.1瀏覽器將從IE10升級至IE11。IE11加入了眾多期待已久的新功能,瀏覽體驗大大提升。此次傲游推出的新版WP瀏覽器在技術上的最大改進就是內核升級至IE11。此外,新版本還修復了之前在瀏覽器上出現的“書簽磁貼崩潰”等問題。經過升級、修復后的瀏覽器操作更加流暢,給人以“絲絲順滑”般的極致瀏覽體驗。
點擊下載傲游瀏覽器:http://www.maxthon.cn/
傲游云瀏覽器WP版不僅是傲游云瀏覽器家族的重要一員,更是傲游全平臺戰略的重要一環。傲游希望借此幫助用戶在不同平臺上獲得更加自由無縫的瀏覽體驗。