快速安裝與配置kubernetes叢集搭
首先,它是一個全新的基於容器技術的分散式架構領先方案。這個方案盡然很新,但它是谷歌十幾年以來大規模應用容器技術的經驗積累和昇華的一個重要成果。確切地說,kubernetes是谷歌嚴格保密十幾年的祕密武器Borg的一個開源版本。Borg是谷歌的一個久負盛名的內部使用的大規模叢集管理系統,它基於容器技術,目的是實現資源管理的自動化,以及跨多個數據中心的資源利用率的最大化。
2015年4月,傳聞許久的Borg論文伴隨kubernetes(K8S)的高調宣傳被谷歌首次公開,大家才得以瞭解它的更多內幕。正是由於站在Borg這個前輩的肩膀上,吸取了Borg過去十年間的經驗與教訓,所以kubernetes一經開源就一鳴驚人,並迅速稱霸了容器技術領域。
如果我們的系統設計遵循了kubernetes的設計思想,那麼傳統系統架構中哪些和業務沒有多大關係的底層程式碼或功能模組,都可以立刻從我們的視線中消失,我們不必再費心於負載均衡的選型和部署實施問題,不必再考慮引入或自己開發一個複雜的服務治理框架,不必再頭疼與服務監控和故障處理模組的開發。總之,使用kubernetes提供的解決方案,我們節約了不少於30%的開發成本,同時可以將精力更加集中於業務本身,而且由於kubernetes提供了強大的自動化機制,所以系統後期的運維難度和運維成本大幅降低。
Kubernetes概述隨著 Docker 技術的發展和廣泛流行,雲原生應用和容器排程管理系統也成為 IT 領域大熱的詞彙。事實上,在 Docker 技術火爆之前,雲原生應用的思想已經由雲端計算技術的領導者和分散式系統架構的推廣者廣泛傳播。例如早在 2011 年 Heroku 的工程師提出了雲原生應用的 12 要素,只不過以虛擬機器技術作為雲原生應用的基礎實施。由於虛擬機器映象大、映象標準不統一以及打包流程和工具不統一,導致了業界無法廣泛接受的雲原生應用標準,限制了雲原生應用的流行。而 Docker 的出現正好解決了這些限制雲原生應用構建、交付和執行的瓶頸,使得構建雲原生應用成為了使用 Docker 的開發者自然而然的選擇。
Kubernetes 是為生產環境而設計的容器排程管理系統,對於負載均衡、服務發現、高可用、滾動升級、自動伸縮等容器雲平臺的功能要求有原生支援。由於 Kubernetes 在K和s間有8個字母,因此常簡稱 k8s。事實上,隨著對 k8s 系統架構與設計理念的瞭解深入,會發現 K8s 系統正是處處為運行雲原生應用而設計考慮;同時,隨著對 k8s 系統使用的加深和推廣,也會有越來越多有關雲原生應用的設計模式產生出來,使得基於 k8s 系統設計和開發生產級的複雜雲原生應用變得像啟動一個單機版容器服務那樣簡單易用。
為什麼要用 Kubernetes使用 Kubernetes 的理由有很多,最基本的一個理由就是:IT 是新技術驅動行業。Docker 這個新興的容器化技術當前已經被很多公司所採用,其從單機走向叢集已成必然,而云計算的蓬勃發展正在加速這一程序。Kubernetes 作為當前唯一被業界廣泛認可和看好的 Docker 分散式系統解決方案。可以預見,在未來幾年內,會有大量的新系統選擇它,不管是執行在企業本地伺服器上還是被託管到公有云上。
使用 Kubernetes 又會收穫哪些好處呢?
首先,使用 Kubernetes 就是在全面擁抱微服務架構。微服務架構的核心就是將一個巨大的單體應用分解為很多小的互相連線的微服務,一個微服務背後可能有多個例項副本在支撐,副本的數量可能會隨著系統的負荷變化而進行調整,內嵌的負載均衡器在 k8s 平臺中有多個例項副本在支撐,副本的數量可能會隨著系統的負荷變化而進行調整,內嵌的負載均衡器 k8s 平臺中發揮了重要的作用。微服務架構使得每個服務都可以由專門的開發團隊來開發,開發者可以自由選擇開發技術,這對於大規模團隊來說很有價值。另外,每個微服務獨立開發、升級、擴充套件,使得系統具備很高的穩定性和快速迭代進化能力。
其次,Kubernetes 系統架構具備了超強的橫向擴容能力。對於網際網路公司來說,使用者規模就等價於資產,誰擁有更多的使用者,誰就能在競爭中勝出,因此超強的橫向擴容能力是網際網路業務系統的關鍵指標之一。不用修改程式碼,一個 Kubernetes 叢集即可從只包含幾個Node 的小叢集平滑擴充套件到擁有成百上千 Noder 大規模叢集,利用 Kubernetes 提供的工具,甚至可以線上完成叢集的擴容。只要微服務設計的得好,結合硬體或者公有云資源的線性增加,系統就能夠承受大量使用者併發訪問所帶來的壓力。
Kubernetes 基本概念和術語Kubernetes中的大部分概念如Node、Pod、Replication Controller、Server、Deploymeng、Job、DaemonSet 等都可以看作一種資源物件,幾乎所有的資源物件都可以通過 Kubernetes提供的 kubectl 工具執行增、刪、改、查等操作,並將其儲存在 etcd 中持久化儲存。從這個角度來看,Kubernets 其實是一個高度自動化的資源控制系統,它通過跟蹤對比 etcd 儲存裡儲存的資源期望狀態與當前環境中的實際資源狀態的差異來實現自動控制和自動糾錯的高階功能。
MasterKubernetes 裡的 Master 指的是叢集控制節點,每個 Kubernetes 叢集裡需要有一個Master 節點來負責整個叢集的管理的控制,基本上 Kubernetes 所有的控制命令進是發給Master,Master 負責具體的執行過程,後面所有執行的命令基本都是在 Master 節點上執行的。Master 節點通常會佔據一個獨立的 X86 伺服器,一個主要的原因是它太重要了,它是整個叢集的大腦,如果它宕機或者不可用,那麼所有的控制命令都將失效。
Master 節點上執行著以下一組關鍵程序:
Kube-apiserver:提供了 HTTP Rest 介面的關鍵服務程序,是 Kubernetes 裡所有資源的增、刪、改、查等操作的唯一入口,也是叢集控制入口程序。 Kube-controller-manager:是 Kubernetes 裡所有資源物件的自動化控制中心,可以理解為資源物件的管家。 Kube-scheduler:負責資源排程的程序,相當於公交公司的排程室。
其實 Master 節點上往往還啟動了一個 etcd server 程序,因為 Kubernetes 裡的所有資源物件的資料全部是儲存在 etcd 中的。
Node除了 Master、Kubernetes 叢集中的其他機器被稱為 Node 節點,在較早的版本中也被稱為 Minion。與 Master 一樣,Node 節點可以是一臺物理主機,也可以是一臺虛擬機器。Node節點才是 Kubernetes 叢集中的工作負載節點,每個 Node 都會被 Master 分配一些負載。當某個 Node 宕機時,其上的工作負載會被 Master 自動轉移到其他節點上去。
每個 Node 節點都執行著以下一組關鍵程序:
Kubelet:負責 Pod 對應的容器的建立、啟停等任務,同時與 Master 節點密切協作,實現叢集管理的基本功能。 Kube-proxy:實現 Kubernetes Service 的通訊與負載均衡機制的重要元件。
Pod:是kubernetes最重要也是最基本的概念。每個Pod都會包含一個 “根容器”,還會包含一個或者多個緊密相連的業務容器。
Kubernetes為每個Pod都分配了唯一的IP地址,稱之為PodIP,一個Pod裡的多個容器共享PodIP地址。要求底層網路支援叢集內任意兩個Pod之間的直接通訊,通常採用虛擬二層網路技術來實現(Flannel)。
k8s叢集部署方案如下是我的叢集部署策略,1個master + 2個node(minion1.2之前的叫法)。我的儲存叢集etcd是單點叢集,不推薦此做法。網路使用的是flannel虛擬二次網路。
Kubernetes具有完備的叢集管理能力:
包括多層次的安全防護和准入機制 多租戶應用支撐能力 透明的服務註冊和服務發現機制 內建智慧負載均衡器 強大的故障發現和自我修復能力 服務滾動升級和線上擴容能力 可擴充套件的資源自動排程機制 以及多粒度的資源管理能力
同時,kubernetes提供了完善的管理工具,這些工具涵蓋了包括開發、部署測試、運維監控在內的各個環節。
在kubernetes中,service(服務)是分散式叢集架構的核心,一個service物件擁有如下關鍵特徵:
擁有一個唯一指定的名字(比如mysql-service)。 擁有一個虛擬IP(Cluster IP、service IP或VIP)和埠號。 能夠提供某種遠端服務能力。 被對映到了提供這種服務能力的一組容器應用上。
Kubernetes.io開發了一個互動式教程,通過WEB瀏覽器就能使用預先部署好的一個Kubernetes叢集,快速體驗kubernetes的功能和應用場景。
連結:https://kubernetes.io/docs/tutorials/kubernetes-basics/
K8s官方下載地址:https://github.com/kubernetes
環境準備工作主機名 作業系統 IP地址 master Centos 7.4-x86_64 192.168.2.102 node1 Centos 7.4-x86_64 192.168.2.108 node2 Centos 7.4-x86_64 192.168.2.228關閉CentOS7自帶的防火牆服務
systemctl disable firewalld systemctl stop firewalld修改主機名
[root@localhost ~]# hostnamectl master //192.168.2.102 [root@localhost ~]# hostnamectl node1 //192.168.2.108 [root@localhost ~]# hostnamectl node2 //192.168.2.228
更改Hostname為 master、node1、node2,配置IP地址,配置3臺測試機的/etc/hosts檔案(在三臺伺服器上同步)
[root@master ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.2.102 master 192.168.2.108 node1 192.168.2.228 node2 [root@master ~]#時間校對(三臺機器都做時間校對)
[root@master ~]# ntpdate ntp1.aliyun.com 13 Sep 14:48:02 ntpdate[1596]: adjust time server 120.25.115.20 offset -0.015854 sec [root@master ~]# hwclock 2018年09月13日 星期四 14時49分51秒 -0.646898 秒安裝Kubernetes,配置dockers映象
[root@master ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo配置kubernetes倉庫
[root@master yum.repos.d]# vim kubernetes.repo [kubernetes] name=kubernetes Repo baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg enabled=1
[root@master ~]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg [root@master ~]# rpm --import rpm-package-key.gpg [root@master yum.repos.d]# yum repolist
[root@master yum.repos.d]# scp CentOS-Base.repo docker-ce.repo kubernetes.repo node1:/etc/yum.repos.d/安裝docker和kubelet
[root@master ~]# yum -y install docker-ce kubelet kubeadm kubectl環境變數
[root@master ~]# vim /usr/lib/systemd/system/docker.service 手動新增一行 Environment="HTTPS_PROXY=http://www.ik8s.io:10080" Environment="NO_PROXY=127.0.0.0/8,172.0.0.0/16"
[root@master ~]# systemctl daemon-reload 啟動docker [root@master ~]# systemctl start docker 設定開機啟動 [root@master ~]# systemctl enable docker [root@master ~]# docker info 保證輸出的都是1 [root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables 1 [root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables 1 [root@master ~]# rpm -ql kubelet /etc/kubernetes/manifests #清單目錄 /etc/sysconfig/kubelet #配置檔案 /etc/systemd/system/kubelet.service /usr/bin/kubelet #主程式 設定開機啟動 [root@master ~]# systemctl enable kubelet初始化
[root@master ~]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
報錯資訊,解決辦法:
[root@master ~]# vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--fail-swap-on=false" [root@master ~]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
注意這一條命令需要儲存好(新增叢集使用)
kubeadm join 192.168.2.102:6443 --token ns4kps.j8cuqwf78emp5a5b --discovery-token-ca-cert-hash sha256:b71b7e52c318959bab3f05f02f6fe51d6396d8c54ea6849ec7556927d1c6c88a [root@master ~]# docker image ls
[root@master ~]# ss –ntl
[root@master ~]# mkdir -p $HOME/.kube [root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 檢測元件執行是否正常 [root@master ~]# kubectl get cs檢視並驗證節點資訊是否成功
[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady master 44m v1.11.3安裝flannel
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml [root@master ~]# curl -sSL "https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml?raw=true" | kubectl create -f -
[root@master ~]# docker image ls檢視並驗證節點資訊是否成功
[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 2h v1.11.3檢視pod執行情況
[root@master ~]# kubectl get pods -n kube-system配置檔案傳到node1、node2
[root@master ~]# scp /usr/lib/systemd/system/docker.service node1:/usr/lib/systemd/system/docker.service [root@master ~]# scp /etc/sysconfig/kubelet node1:/etc/sysconfig/ [root@master ~]# scp /usr/lib/systemd/system/docker.service node2:/usr/lib/systemd/system/docker.service [root@master ~]# scp /etc/sysconfig/kubelet node2:/etc/sysconfig/node1伺服器配置
[root@node1 ~]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
[root@node1 ~]# rpm --import rpm-package-key.gpg安裝docker、kubelet
[root@node1 ~]# yum -y install docker-ce kubelet kubeadm啟動docker
[root@node1 ~]# systemctl start docker [root@node1 ~]# systemctl enable docker kubelet [root@node1 ~]# docker info新增主叢集裡
[root@node1 ~]# kubeadm join 192.168.2.102:6443 --token ns4kps.j8cuqwf78emp5a5b --discovery-token-ca-cert-hash sha256:b71b7e52c318959bab3f05f02f6fe51d6396d8c54ea6849ec7556927d1c6c88a --ignore-preflight-errors=Swap檢視下載映象
[root@node1 ~]# docker image ls在master伺服器上可以查節點資訊
[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 3h v1.11.3 node1 Ready 7m v1.11.3 [root@master ~]# kubectl get pods -n kube-system -o widenode2伺服器配置
[root@node2 ~]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
[root@node2 ~]# rpm --import rpm-package-key.gpg安裝docker、kubelet
[root@node2 ~]# yum -y install docker-ce kubelet kubeadm啟動docker
[root@node2 ~]# systemctl start docker [root@node2 ~]# systemctl enable docker kubelet [root@node2 ~]# docker info新增主叢集裡
[root@node2 ~]# kubeadm join 192.168.2.102:6443 --token ns4kps.j8cuqwf78emp5a5b --discovery-token-ca-cert-hash sha256:b71b7e52c318959bab3f05f02f6fe51d6396d8c54ea6849ec7556927d1c6c88a --ignore-preflight-errors=Swap在master伺服器上可以查節點資訊
[root@master ~]# kubectl get nodes
[root@master ~]# kubectl get pods -n kube-system -o wide
相關推薦
快速安裝與配置kubernetes叢集搭
Kubernetes是什麼? 首先,它是一個全新的基於容器技術的分散式架構領先方案。這個方案盡然很新,但它是谷歌十幾年
Kubernetes學習系列之簡單叢集安裝與配置
環境配置 CentOS Linux release 7.3.1611 (Core) etcd-v3.2.6 docker-ce-17.03.2.ce kubernetes-v1.6.9 192.168.108.128 節點1 192.168.108.129 節點2 19
Kubernetes叢集安裝與配置
注:本文系統環境為centos7,master:10.1.1.1,node1:10.1.1.2 etcd安裝與配置 使用yum install etcd或者官網下載etcd進行安裝,copy etcd和etcdctl到/usr/bin目錄下 設定syste
國內環境Kubernetes v1.12.1的安裝與配置
一、些重要概念 Cluster:計算、儲存、網路資源的總和。Kubernetes的各種基於容器的應用都是執行在這些資源上的。 Master:Kubernetes的大腦,負責排程各種計算資源。Master可以是物理機或虛擬機器,多個Master可以同時執行,並實現HA。Master
Hadoop叢集的安裝與配置
一.準備Linux環境(虛擬機器) 1.先將虛擬機器的網路模式選為NAT 2.修改主機名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=hdp-node-01
MySQL Galera 叢集安裝與配置
galera 叢集概述與搭建 Galera replication原理 從客戶端看整體的流程 其中對應的角色分為2個:協調者和參與者 協調者: 1、 接收客戶端請求 2、 廣播請求到其他參與者(包括自己) 3、 作為參與者進行資料更新 4、 更新失敗
雲伺服器環境安裝與配置:kafka叢集
本文詳細說明kafka叢集安裝和命令列的基本使用 環境 zk叢集:192.168.31.201、192.168.31.202、192.168.31.203 Centos7 三臺 對齊
ZooKeeper叢集安裝與配置(ZooKeeper3.4.6)
環境 同時需要在/etc/profile檔案中增加 export JAVA_HOME=/usr/java/jdk1.8.0_65 export CLASSPATH=.:$JAVA_HOM
分散式Web應用----Linux環境下zookeeper叢集環境的安裝與配置
寫在前面 zookeeper在分散式應用中運用的比較廣泛,瞭解zookeeper的原理對理解分佈架構的應用具有很大的幫助,學會安裝zookeeper是學習zookeeper的前提,自己剛剛學習zookeeper,記錄一下安裝過程,增加自己印象,方便其它人學習。
Kubernetes dashboard1.8.0 WebUI安裝與配置
kubernetes-dashboard.yaml apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: kubernetes-dashboard addonman
ELK叢集-Filebeat安裝與配置(二)
filebeat是一個ELK官方推出的輕量級日誌收集工具,用go語言編寫,相比logstash佔用資源更少,安裝也更方便,可以通過包管理直接安裝,缺點是不具備logstash的filter filebeat下載地址 安裝 tar -zxvf filebeat-6
Kafka_2.10-0.10.0.0叢集安裝與配置
上文已經講過如何安裝Zookeeper叢集,因為Kafka叢集需要依賴Zookeeper服務,雖然Kafka有內建Zookeeper,但是還是建議獨立安裝Zookeeper叢集服務,此處不再贅述 kafka叢集還是安裝在10.10.16.170 、
ZooKeeper叢集環境安裝與配置
ZooKeeper版本:3.4.5約定:3臺虛擬機器ZooKeeper官網:http://zookeeper.apache.org/1.下載解壓# wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.5
Zookeeper叢集的安裝與配置
Zookeeper叢集的安裝配置實際上非常簡單,只需編輯幾個配置檔案即可。 有一點需要注意的,Zookeeper叢集中Zookeeper服務的數量儘量是奇數個,因為Zookeeper的仲裁機制要求超過半數的服務正常才可以,所以如果是4個的話,那兩個正常是無法工作的,必須要3
Kubernetes二進制方式v1.13.2生產環境的安裝與配置(HTTPS+RBAC) ?
googl modify 目前 ffi 通告 exe ppr firewalld 前臺 Kubernetes二進制方式v1.13.2生產環境的安裝與配置(HTTPS+RBAC) 一 背景 由於眾所周知的原因,在國內無法直接訪問Google的服務。二進制包由於其下載方便、靈活
Kubernetes Dashboard的安裝與配置
成了 .com recommend kvc 方式 blog lcm 每一個 ger Kubernetes Dashboard的安裝與配置 一 背景 通過kubeadm快速完成了kubernetes的安裝,即可迅速地體驗到kubernetes的強大功能。美中不足的是,只能通過
CentOS下torque叢集配置(一)-torque安裝與配置
一、Centos7系統的安裝及設定 1、給兩臺電腦安裝CentOS7.0,光碟啟動路徑修改為:/dev/cdrom 修改主機名稱 # hostnamectl set-hostname <host-name> 2、設定ip地址 # vi /etc/sysco
spark叢集安裝與配置
Spark有三種執行模式,分別為: local模式-只執行在本地,相當於偽分散式 standalone模式-這種模式只需要安裝Spark即可,使用自帶的資源管理器 Spark on yarn/mesos模式-這種模式Spark將使用yarn/mesos作為資源管理器 一般來
zookeeper(叢集)的安裝與配置
1、到官網https://zookeeper.apache.org/releases.html#download下載zookeeper安裝包,我使用的是zookeeper-3.4.13.tar.gz。 2、拷貝到linux伺服器,並解壓。命令:tar –zxv
kafka+zookeeper叢集安裝與配置(CENTOS7環境)及開發中遇到的問題解決
kafka+zookeeper叢集安裝與配置及問題解決(CENTOS)ZOOKEEPER 叢集主要配置(zoo.cfg) :tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/hadoop/spark/zookeeper-3.4.6/zkdata data