什麼是k8s
- Kubernetes的名字來自希臘語,意思是“舵手” 或 “領航員”。K8s是将8個字母“ubernete”替換為“8”的縮寫。
- K8S的創造者,是衆人皆知的行業巨頭——Google。
- 然而K8S并不是一件全新的發明。它的前身,是Google自己搗鼓了十多年的Borg系統。
- K8S是2014年6月由Google公司正式公布出來并宣布開源的。
為什麼要使用k8s
- 就在Docker容器技術被炒得熱火朝天之時,大家發現,如果想要将Docker應用于具體的業務實作,是存在困難的——編排、管理和排程等各個方面,都不容易。于是,人們迫切需要一套管理系統,對Docker及容器進行更進階更靈活的管理,就在這個時候,K8S出現了
- Kubernetes是Google 2014年建立管理的,是Google 10多年大規模容器管理技術Borg的開源版本。
- K8s 是容器叢集管理系統,是一個開源的平台,可以實作容器叢集的自動化部署、自動擴縮容、維護等功能
什麼時候用
- 快速部署應用
- 快速擴充應用
- 無縫對接新的應用功能
- 節省資源,優化硬體資源的使用
在那用
- 可移植: 支援公有雲,私有雲,混合雲,多重雲(multi-cloud)
- 可擴充: 子產品化, 插件化, 可挂載, 可組合
- 自動化: 自動部署,自動重新開機,自動複制,自動伸縮/擴充
怎麼用
- Build, Ship and Run (建立,發送和運作)
- Build once,Run anywhere(搭建一次,到處能用)
- Docker技術的三大核心概念,分别是:
- 鏡像(Image)
- 容器(Container)
- 倉庫(Repository)
k8s 架構
一個K8S系統,通常稱為一個K8S叢集(Cluster)
這個叢集主要包括兩個部分:
- 一個Master節點(主節點)
-
Master節點包括API Server、Scheduler、Controller manager、etcd。
API Server是整個系統的對外接口,供用戶端和其它元件調用,相當于“營業廳”。
Scheduler負責對叢集内部的資源進行排程,相當于“排程室”。
Controller manager負責管理控制器,相當于“大總管”。
- 一群Node節點(計算節點)
-
Node節點包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可選),還有就是Pod。
Pod是Kubernetes最基本的操作單元。
一個Pod代表着叢集中運作的一個程序,它内部封裝了一個或多個緊密相關的容器。
除了Pod之外,K8S還有一個Service,一個Service可以看作一組提供相同服務的Pod的對外通路接口
Docker,不用說了,建立容器的。
Kubelet,主要負責監視指派到它所在Node上的Pod,包括建立、修改、監控、删除等。
Kube-proxy,主要負責為Pod對象提供代理。
Fluentd,主要負責日志收集、存儲與查詢。
安裝配置
1. 伺服器資源/IP規劃
registry 192.168.1.100 #鏡像私有倉庫
master 192.168.1.10 #主節點
node1 192.168.1.11 #docker子節點,性能盡量優選
node2 192.168.1.12
node3 192.168.1.13
2. 先決條件
開啟路由轉發 #每個節點都需要
echo “net.ipv4.ip_forward=1” >> /etc/sysctl.conf
關閉防火牆、selinux
3. 配置 yum 源
可以選擇配置線上yum源;或者私有yum源,私有鏡像資源可在此處下:k8s-yum
4. 在registry上安裝并啟動服務
yum install docker-distribution
systemctl start docker-distribution && systemctl enable docker-distribution
5. 在三台node節點上安裝 docker配置檔案并啟動服務
yum install docker
sed -i ‘/^# INSECURE/s/^# //’ /etc/sysconfig/docker
sed -i ‘/^INSE/s/-registry/-registry 192.168.1.100:5000/’ /etc/sysconfig/docker
sed -i ‘/ADD_REGISTRY/s/registry.access.redhat.com/192.168.1.100:5000/’ /etc/sysconfig/docker
上傳鏡像至其中一個node,然後load并push至registry倉庫 #以下3個鏡像可在此處下載下傳:轉至下載下傳頁
centos.tar
kubernetes-dashboard.tar
pod-infrastructure.tar
上傳過程詳見:上傳至私有倉庫
驗證
curl http://192.168.1.100:5000/v2/_catalog
6. 配置 kubernets - master主機
需安裝的 package:
etcd
kubernetes-master
kubernetes-client
需啟動的 service: #在修改完配置檔案後啟動并設定開機自啟
kube-apiserver
kube-controller-manager
kube-scheduler
etcd
conf:
/etc/etcd/etcd.conf
6: ETCD_LISTEN_CLIENT_URLS=“http://192.168.1.10:2379”
/etc/kubernetes/config
22: KUBE_MASTER="–master=http://192.168.1.10:8080"
/etc/kubernetes/apiserver
8: KUBE_API_ADDRESS="–insecure-bind-address=0.0.0.0"
17: KUBE_ETCD_SERVERS="–etcd-servers=http://192.168.1.10:2379"
23: 删除 ServiceAccount 參數
/etc/kubernetes/controller-manager #無需改動
/etc/kubernetes/scheduler #無需改動
驗證
kubectl get cs
kubectl get csr
kubectl get node
7. 配置 kubernets #三台node上都需要
需安裝 package:
kubernetes-node
需啟動 service: #在修改完配置檔案後啟動
kubelet
kube-proxy
docker
需配置 conf:
/etc/sysconfig/docker
4: 添加參數 --insecure-registry=192.168.1.100:5000 --add-registry 192.168.1.100:5000
/etc/kubernetes/config
22: KUBE_MASTER="–master=http://192.168.1.10:8080"
/etc/kubernetes/kubelet
5: KUBELET_ADDRESS="–address=0.0.0.0"
11: KUBELET_HOSTNAME="–hostname-override=本機名稱"
14: 添加 --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --pod-infra-container-image=pod-infrastructure:latest
手動建立:
vim /etc/kubernetes/kubelet.kubeconfig ##在node節點上建立此檔案
apiVersion: v1
kind: Config
clusters:
- cluster:
server: http://192.168.1.10:8080 ###Master的IP,即自身IP
name: local
contexts:
- context:
cluster: local
name: local
current-context: local
8. 網絡
master:
vim /etc/etcd/etcd.conf #修改檔案參數
ETCD_LISTEN_CLIENT_URLS=“http://0.0.0.0:2379”
執行以下指令:
etcdctl mk /atomic.io/network/config ‘{“Network”: “10.254.0.0/16”, “Backend”: {“Type”: “vxlan”}}’
重新開機etcd服務
#所有node節點及masetr節點上執行
安裝 package: flannel
vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS=“http://192.168.1.10:2379”
重新開機服務:
systemctl restart flanneld docker
9. 建立容器,測試
baseos.yaml kube-dashboard.yaml 檔案可自己寫,也可以在步驟3中下載下傳
kubectl create -f baseos.yaml
測試
kubectl get pod -o wide
kubectl exec -it 容器ID – /bin/bash
kubectl create -f kube-dashboard.yaml
浏覽器通路http://192.168.1.11:30090
