首先,它是一個全新的基於容器技術的分佈式架構領先方案。Kubernetes(k8s)是Google開源的容器集羣管理系統(Google內部:Borg)。在Docker技術的基礎上,爲容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能,提升了大規模容器集羣管理的便捷性。
Kubernetes是一個完備的分佈式系統支撐平臺,具備完備的集羣管理能力,多擴多層次的安全防禦和准入機制、多租戶應用支撐能力、透明的服務註冊和發現機制、內建智能負載均衡器、強大的故障發現和自我修復能力、服務滾動升級和在線擴容能力、可擴展的資源自動調度機制以及多粒度的資源配額管理能力。同時Kubernetes提供完善的管理工具,涵蓋了包括開發、部署測試、運維監控在內的各個環節。node
Kubernetes中,Service是分佈式集羣架構的核心,一個Service對象擁有以下關鍵特徵:linux
擁有一個惟一指定的名字
擁有一個虛擬IP(Cluster IP、Service IP、或VIP)和端口號
可以體統某種遠程服務能力
被映射到了提供這種服務能力的一組容器應用上docker
容器編排
輕量級
開源
彈性伸縮
負載均衡json
cluster是 計算、存儲和網絡資源的集合,k8s利用這些資源運行各類基於容器的應用。vim
master是cluster的大腦,他的主要職責是調度,即決定將應用放在那裏運行。master運行linux操做系統,能夠是物理機或者虛擬機。爲了實現高可用,能夠運行多個master。後端
node的職責是運行容器應用。node由master管理,node負責監控並彙報容器的狀態,同時根據master的要求管理容器的生命週期。node運行在linux的操做系統上,能夠是物理機或者是虛擬機。安全
pod是k8s的最小工做單元。每一個pod包含一個或者多個容器。pod中的容器會做爲一個總體被master調度到一個node上運行。bash
k8s一般不會直接建立pod,而是經過controller來管理pod的。controller中定義了pod的部署特性,好比有幾個劇本,在什麼樣的node上運行等。爲了知足不一樣的業務場景,k8s提供了多種controller,包括deployment、replicaset、daemonset、statefulset、job等。服務器
是最經常使用的controller。deployment能夠管理pod的多個副本,並確保pod按照指望的狀態運行。網絡
實現了pod的多副本管理。使用deployment時會自動建立replicaset,也就是說deployment是經過replicaset來管理pod的多個副本的,咱們一般不須要直接使用replicaset。
用於每一個node最多隻運行一個pod副本的場景。正如其名稱所示的,daemonset一般用於運行daemon。
可以保證pod的每一個副本在整個生命週期中名稱是不變的,而其餘controller不提供這個功能。當某個pod發生故障須要刪除並從新啓動時,pod的名稱會發生變化,同時statefulset會保證副本按照固定的順序啓動、更新或者刪除。
用於運行結束就刪除的應用,而其餘controller中的pod一般是長期持續運行的。
deployment能夠部署多個副本,每一個pod 都有本身的IP,外界如何訪問這些副本那?
答案是service
k8s的 service定義了外界訪問一組特定pod的方式。service有本身的IP和端口,service爲pod提供了負載均衡。
k8s運行容器pod與訪問容器這兩項任務分別由controller和service執行。
能夠將一個物理的cluster邏輯上劃分紅多個虛擬cluster,每一個cluster就是一個namespace。不一樣的namespace裏的資源是徹底隔離的。
服務分組,小集羣,多集羣
服務分組,大集羣,單集羣
Kubernetes Master控制組件,調度管理整個系統(集羣),包含以下組件:
做爲Kubernetes系統的入口,其封裝了核心對象的增刪改查操做,以RESTful API接口方式提供給外部客戶和內部組件調用。維護的REST對象持久化到Etcd中存儲。
爲新創建的Pod進行節點(node)選擇(即分配機器),負責集羣的資源調度。組件抽離,能夠方便替換成其餘調度器。
負責執行各類控制器,目前已經提供了不少控制器來保證Kubernetes的正常運行。
管理維護Replication Controller,關聯Replication Controller和Pod,保證Replication Controller定義的副本數量與實際運行Pod數量一致。
管理維護Node,按期檢查Node的健康狀態,標識出(失效|未失效)的Node節點。
管理維護Namespace,按期清理無效的Namespace,包括Namesapce下的API對象,好比Pod、Service等。
管理維護Service,提供負載以及服務代理。
管理維護Endpoints,關聯Service和Pod,建立Endpoints爲Service的後端,當Pod發生變化時,實時更新Endpoints。
管理維護Service Account,爲每一個Namespace建立默認的Service Account,同時爲Service Account建立Service Account Secret。
管理維護Persistent Volume和Persistent Volume Claim,爲新的Persistent Volume Claim分配Persistent Volume進行綁定,爲釋放的Persistent Volume執行清理回收。
管理維護Daemon Set,負責建立Daemon Pod,保證指定的Node上正常的運行Daemon Pod。
管理維護Deployment,關聯Deployment和Replication Controller,保證運行指定數量的Pod。當Deployment更新時,控制實現Replication Controller和 Pod的更新。
管理維護Job,爲Jod建立一次性任務Pod,保證完成Job指定完成的任務數目
實現Pod的自動伸縮,定時獲取監控數據,進行策略匹配,當知足條件時執行Pod的伸縮動做。
負責管控容器,Kubelet會從Kubernetes API Server接收Pod的建立請求,啓動和中止容器,監控容器運行狀態並彙報給Kubernetes API Server。
負責爲Pod建立代理服務,Kubernetes Proxy會從Kubernetes API Server獲取全部的Service信息,並根據Service的信息建立代理服務,實現Service到Pod的請求路由和轉發,從而實現Kubernetes層級的虛擬轉發網絡。
Node上須要運行容器服務
主機名 | IP地址 | 角色 | 配置 | 系統 |
---|---|---|---|---|
master | 192.168.0.110 | 主節點 | 2C 2G | CentOS 7.6 |
node01 | 192.168.0.104 | 工做節點 | 2C 2G | CentOS 7.6 |
node02 | 192.168.0.106 | 工做節點 | 2C 2G | CentOS 7.6 |
備註:實驗環境的虛擬機至少2核2g
連接:https://pan.baidu.com/s/1Qzs8tcf4O-8xlTmnl2Qx5g
提取碼:ah4y
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
timedatectl set-timezone Asia/Shanghai
hostnamectl set-hostname master &&bash
hostnamectl set-hostname node01 &&bash
hostnamectl set-hostname node02 &&bash
vim /etc/hosts #主機名解析
末尾添加:
192.168.0.110 master
192.168.0.104 node1
192.168.0.106 node2
其它2臺能夠添加,也能夠拷貝文件:
scp /etc/hosts root@192.168.0.104:/etc/hosts
scp /etc/hosts root@192.168.0.106:/etc/hosts
ssh-keygen #生成公鑰
ssh-copy-id -i .ssh/id_rsa.pub root@node1
ssh-copy-id -i .ssh/id_rsa.pub root@node2
ssh-copy-id -i .ssh/id_rsa.pub root@master
ssh root@node1 #測試鏈接
swapoff -a #臨時關閉
sed -i '12s/^\//#\//g' /etc/fstab #永久關閉
echo -e "net.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.d/k8s.conf
sysctl --system #使其生效
tar -zxvf docker-ce-18.09.tar.gz
cd docker && yum localinstall *.rpm -y #yum安裝相關依賴
systemctl start docker
systemctl enable docker #開機啓動
docker version
vim /etc/docker/daemon.json #添加
{
"registry-mirrors": ["https://fskvstob.mirror.aliyuncs.com/"]
}systemctl daemon-reload #從新加載
3臺操做相同
cd ../
tar -zxvf kube114-rpm.tar.gz
cd kube114-rpm && yum localinstall *.rpm -y #yum解決依賴
cd ../
docker load -i k8s-114-images.tar.gz
docker load -i flannel-dashboard.tar.gz
注意:若是導入鏡像發生以下報錯:
報錯緣由:鏡像壓縮包下載出問題了
解決辦法:從新下載或更換鏡像
docker images #共9個鏡像
只在master上面操做
kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16
若出現這種報錯:
解決方法:
echo "1" >> /proc/sys/net/ipv4/ip_forward
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get node
kubectl get pod --all-namespaces
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
echo $KUBECONFIG #應該返回/etc/kubernetes/admin.conf
kubectl create -f kube-flannel.yml
kubectl get node
在node節點服務器操做
systemctl enable kubelet #添加開機啓動k8s
kubeadm join 192.168.0.110:6443 --token 2vjmyw.9p6cbn8m8oqs41ta \
--discovery-token-ca-cert-hash sha256:e4c1d3e9da26e2f488dec621122a30d8725762c20bf281519376ed0ae8c7204b #不要複製這個,要拷貝系統生成的token才行!
注意:若出現和master系統報錯,相同辦法解決便可!
echo "1" >> /proc/sys/net/ipv4/ip_forward
kubectl get node
kubectl apply -f kubernetes-dashboard.yaml
kubectl apply -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml
kubectl -n kube-system get svc
訪問地址 :http://ip:32000
1.參考文章https://www.jianshu.com/p/0e1a3412528e2.參考老齊的k8s教學視頻3.參考k8s官方中文文檔https://kubernetes.io/zh/docs/home/