您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何二進制安裝k8s集群”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何二進制安裝k8s集群”這篇文章吧。
k8s集群安裝的方式有很多,可以基于kubeadmin工具來創建與安裝,也可以一個組件一個組件的安裝。如果是公有云上環境可以基于console UI或者command line的方式創建與安裝。上面所說,這里主要是學習的目的,所以采用二進制手動一個組件一個組件的安裝。不論以任何方式創建k8s集群都會考慮如下一些條目。
容器:容器目前基本都是docker了,當然容器不僅僅只有docker。容器的實現也有很多,比方說podman(據說centos-8/redhat-8會預裝),還有pivotal公司的商業化容器等(用在其pivotal cloud foundry pass里)。當然容器實現的大致原理不在這里細說,有興趣的同學可以研究一下linux namespace/cgroup/ufs,就會對容器大致原理有所了解和認識。
K8s基礎組件:存儲組件etcd,master組件api-server,controller-manager,kube-scheduler,worker組件kubelet,kube-proxy,客戶端工具kubectl。
容器之間網絡通訊:容器之間的網絡通訊總結起來基本分為兩種,underlay方式和overlay方式。underlay方式在通訊過程中沒有額外的封包,通常將容器的宿主作為路由來實現數據包的轉發。常見的實現方案有flannel host-gw方式,calico bgp方式。
overlay方式在通訊過程中有額外的封包,例如flannel vxlan方式(在三層網絡里構建二層網絡,即在udp包里封裝eth以太包),calico ipip模式(在ip包里再次封裝ip包)。還有flannel udp方式,在upd包里封裝ip包(當然這種方式使用tun device,每次通訊都涉及到用戶態到內核態的切換,所以效率不高,基本是不會被用的。不過作為學習入手是可以的)。
另外除了flannel和calico方案之外還有weave,ovs等方案,k8s自己并沒有定義網絡方案。畢竟網絡實現會有多種情況,不同場景的復雜度也不盡相同,也不好一下子定死。感覺k8s把網絡方案開放出來由不同的社區實現也是比較好的選擇,一來出現了不同的k8s網絡方案,不是一家獨大,有利于技術和社區發展,二來也讓使用者根據自己的實際情況有不同的選擇。
對于這塊感興趣的同學可以多了解下linux bridge,veth-pair,route-table,arp-table,iptable,nat,fdb,tun&tap device,ipip-tunnel,vxlan,bgp protocol,l2-miss,l3-miss等基礎知識,k8s的網絡方案都是在這些基礎知識上構建起來的。這里就不展開細節,擴展起來也可以寫一個系列了。
鏡像image的倉庫:用來存儲image的repo,目前選擇有harbor(vmware開源的),nexus(這個就不用說了吧),不過harbor是專門做image repo的,nexus是支持了image repo。當然了如果是自建的private repo還要考慮volume和house-keeping(總不能放著一直不管吧)。開源方案短期可以考慮nsf掛載volume,長期可以用ceph集群掛載volume,當然有錢的話可以用nas。
容器的dns:容器之間通訊當然是用fqdn的了(容器是動態創建和銷毀的,ip地址一定會變,不可能用ip。再說ip那么難記,也不方便用),既然有fqdn,那么一定就有dns服務了。從k8s各個版本來看,有過不同的dns,例如最早的sky-dns,到后來的kube-dns,到現在最新的coredns等。
可視化dashboard:一般用來把k8s集群中的資源以UI console的形式呈現出來,以及提供一些對資源的基礎操作,這個一般是由kube-dashboard來實現。
外部訪問容器提供的服務:服務部署到集群里肯定是需要從集群外部來調用的(有點廢話,不被外部調用難道只在里面相互調用自嗨么)。一般有node port方式,ingress方式,公有云的環境里不同的廠商還提供不同的load balancer方式。當然node port方式在service里定義一下type和port就好,load balancer方式有興趣的同學可以查看一下不同公有云廠商提供的doc。對于ingress來說,目前用的比較多的是nginx-ingress,traefik ingress,haproxy ingress。
鏡像的release發布管理:有了鏡像需要發布部署到集群里,可以用最原始的命令,不過比較費勁。當然目前已經有工具helm,這樣我們就方便很多。helm也包括了client,tiller server還有charts repo(存放k8s application package)。
持久化存儲:一般k8s里的應用都是無狀態的,不過也避免不了存儲數據。k8s提供給我們persistent volume機制。當然底層我們可以用nfs,ceph,nas等存儲。
監控與預警:任何應用肯定是需要監控和預警的,對于k8s里方案也比較多。例如prometheus+grafana,telegraf+grafana+influxdb等等,這也是一個非常大的話題,暫時不在這里展開,擴展起來足足可以有一個系列。
日志的收集:日志的收集總結起來也基本有兩種方式,sidecar方式和daemonset方式。sidecar方式需要在每一個pod里部署一個日志收集的agent,而daemonset方式需要在集群里部署日志收集agent的daemonset,就不需要每個pod里都有日志收集agent的container。當然日志收集方案也比較多,filebeat/fluentd/logstash(logstash比較重,一般不太用)為agent,es為存儲,kabina為視圖(ELK/EFK)。有錢也可以選擇splunk,當然它可不僅僅是提供日志收集和搜索的功能。
對于本次安裝我們用的組件如下:
ssl證書:各個組件之間的通訊開啟ssl,我們不暴力關閉防火墻。
容器:docker(18.09.6版本)
etcd:3.3.11版本
kubectl:1.15.1版本
kube-apiserver:1.15.1版本
kube-controller-manager:1.15.1版本
kube-scheduler:1.15.1版本
kubelet:1.15.1版本
kube-proxy:1.15.1版本
kubectl-debug:0.1.1本版(非k8s官方工具,主要用來方便調試pod。當你遇到一個pod里什么工具top/nslookup/ps/netstat/tcpdump等都沒有,是沒法調試的。當然從制作image的角度來說確實是不應該把和應用無關的items放到image里的,可是沒有這些工具想要調試也是臣妾做不到啊,kubectl-debug就是為了解決這個問題的)
pod網絡通訊:使用flannel(0.10.0版本)的host-gw方式(注意此方式要求所有的宿主host必須在同一個大二層網絡里,換句話說也就是所有host不能跨ip網段)。
鏡像image的倉庫:使用harbor(1.8.1版本),存儲用nfs掛載。當然harbor依賴docker-compose,所以也會用到docker-compose(1.24.1版本)
容器dns:使用coredns,部署在集群里,原始image為
k8s.gcr.io/coredns:1.3.1
dashboard:使用kube-dashboard,部署在集群里,原始image為k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
ingress外部訪問容器:使用nginx-ingress,部署在集群里,原始鏡像quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.1
示例:部署nginx應用作為example application
image release發布工具:
a):helm client(2.14.3版本)
b):tiller server(2.14.3版本,部署在集群里)
c):chartmuseum(0.9.0版本,作為private charts repo)
d):helmpush(0.7.1版本,用于把k8s應用package推送到priavte charts repo chartmuseum里)
環境介紹
OS:oracle virtual box, centos-7
Master:1臺vm,172.20.11.41
(當然這里沒有做master的HA,有興趣的同學可以看一下nginx/haproxy + keepalived)
Worker:2臺vm
172.20.11.42/172.20.11.43
Master 安裝:
docker
etcd
flannel
kubectl
kube-apiserver
kube-scheduler
kube-controller-manager
kubectl-debug
docker-componse
harbor
nfs client
helm
chartmuseum
helmpush
5. Worker 安裝:
docker
etcd
flannel
kubelet
kube-proxy
nfs-server(安裝在172.20.11.43)
6. 集群中的基礎服務安裝:
coredns
kube-dashboard
nginx-ingress
tiller-server
以上是“如何二進制安裝k8s集群”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。