使用Kubespray部署生產可用的Kubernetes集群(1.11.2)

Kubernetes的安裝部署是難中之難,每個版本安裝方式都略有區別。筆者一直想找一種支持多平臺相對簡單適用于生產環境 的部署方案。經過一段時間的調研,有如下幾種解決方案進入筆者視野:


部署方案優點缺點
Kubeadm官方出品部署較麻煩、不夠透明
Kubespray官方出品、部署較簡單、懂Ansible就能上手不夠透明
RKE部署較簡單、需要花一些時間了解RKE的cluster.yml配置文件不夠透明
手動部署 第三方操作文檔 完全透明、可配置、便于理解K8s各組件之間的關系部署非常麻煩,容易出錯

其他諸如Kops之類的方案,由于無法跨平臺,或者其他因素,被我pass了。

最終,筆者決定使用Kubespray部署Kubernetes集群。也希望大家能夠一起討論,總結出更加好的部署方案

廢話不多說,以下是操作步驟。

<!-- more -->

注:撰寫本文時,筆者臨時租賃了幾臺海外阿里云機器,實現了科學上網。如果您的機器在國內,請:

  • 考慮科學上網
  • 或修改Kubespray中的gcr地址,改為其他倉庫地址,例如阿里云鏡像地址。

主機規劃

IP作用
172.20.0.87ansible-client
172.20.0.88master,node
172.20.0.89master,node
172.20.0.90node
172.20.0.91node
172.20.0.92node

準備工作

關閉selinux

所有機器都必須關閉selinux,執行如下命令即可。

~]# setenforce 0
~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

網絡配置

在master機器上

~]# firewall-cmd --permanent --add-port=6443/tcp
~]# firewall-cmd --permanent --add-port=2379-2380/tcp
~]# firewall-cmd --permanent --add-port=10250/tcp
~]# firewall-cmd --permanent --add-port=10251/tcp
~]# firewall-cmd --permanent --add-port=10252/tcp
~]# firewall-cmd --permanent --add-port=10255/tcp
~]# firewall-cmd --reload
~]# modprobe br_netfilter
~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
~]# sysctl -w net.ipv4.ip_forward=1

如果關閉了防火墻,則只需執行最下面三行。

在node機器上

~]# firewall-cmd --permanent --add-port=10250/tcp
~]# firewall-cmd --permanent --add-port=10255/tcp
~]# firewall-cmd --permanent --add-port=30000-32767/tcp
~]# firewall-cmd --permanent --add-port=6783/tcp
~]# firewall-cmd --reload
~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
~]# sysctl -w net.ipv4.ip_forward=1

如果關閉了防火墻,則只需執行最下面兩行。

【可選】關閉防火墻

 systemctl stop firewalld

在ansible-client機器上安裝ansible

安裝ansible

~]# sudo yum install epel-release
~]# sudo yum install ansible 

安裝jinja2

~]# easy_install pip
~]# pip2 install jinja2 --upgrade

如果執行pip2 install jinja2 --upgrade 出現類似如下的提示:

You are using pip version 9.0.1, however version 18.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

則執行pip install --upgrade pip 升級pip,再執行pip2 install jinja2 --upgrade

安裝Python 3.6

~]# sudo yum install python36 –y

在ansible-client機器上配置免密登錄

生成ssh公鑰和私鑰

在ansible-cilent機器上執行:

~]# ssh-keygen

然后三次回車,生成ssh公鑰和私鑰。

建立ssh單向通道

在ansible-cilent機器上執行:

~]# ssh-copy-id root@172.20.0.88		#將公鑰分發給88機器
~]# ssh-copy-id root@172.20.0.89
~]# ssh-copy-id root@172.20.0.90
~]# ssh-copy-id root@172.20.0.91
~]# ssh-copy-id root@172.20.0.92

在ansible-client機器上安裝kubespray

1 下載kubespray

TIPS:本文下載的是master分支,如果大家要部署到線上環境,建議下載RELEASE分支。筆者撰寫本文時,最新的RELEASE是2.6.0,RELEASE版本下載地址:https://github.com/kubernetes-incubator/kubespray/releases)

~]# git clone https://github.com/kubernetes-incubator/kubespray.git

2 安裝kubespray需要的包:

~]# cd kubespray
~]# sudo pip install -r requirements.txt

3 拷貝inventory/sample ,命名為inventory/mycluster ,mycluster可以改為其他你喜歡的名字

cp -r inventory/sample inventory/mycluster

4 使用inventory_builder,初始化inventory文件

~]# declare -a IPS=(172.20.0.88 172.20.0.89 172.20.0.90 172.20.0.91 172.20.0.92)
~]# CONFIG_FILE=inventory/mycluster/hosts.ini python36 contrib/inventory_builder/inventory.py ${IPS[@]} 

此時,會看到inventory/mycluster/host.ini 文件內容類似如下:

[k8s-cluster:children]
kube-master 
kube-node 

[all]
node1 ansible_host=172.20.0.88 ip=172.20.0.88
node2 ansible_host=172.20.0.89 ip=172.20.0.89
node3 ansible_host=172.20.0.90 ip=172.20.0.90
node4 ansible_host=172.20.0.91 ip=172.20.0.91
node5 ansible_host=172.20.0.92 ip=172.20.0.92

[kube-master]
node1 
node2 

[kube-node]
node1 
node2 
node3 
node4 
node5 

[etcd]
node1 
node2 
node3 

[calico-rr] 
[vault]
node1 
node2 
node3 

5 使用ansible playbook部署kubespray

~]# ansible-playbook -i inventory/mycluster/hosts.ini cluster.yml

6 大概20分鐘左右,Kubernetes即可安裝完畢。

驗證

驗證1:查看Node狀態

]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 Ready master,node 2m v1.11.2
node2 Ready master,node 2m v1.11.2
node3 Ready node 2m v1.11.2
node4 Ready node 2m v1.11.2
node5 Ready node 2m v1.11.2

每個node都是ready的,說明OK。

驗證2:部署一個NGINX

# 啟動一個單節點nginx ]# kubectl run nginx --image=nginx:1.7.9 --port=80 
# 為“nginx”服務暴露端口 ]# kubectl expose deployment nginx --type=NodePort 
# 查看nginx服務詳情 ]# kubectl get svc nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.233.29.96 <none> 80:32345/TCP 14s

# 訪問測試,如果能夠正常返回NGINX首頁,說明正常 ]# curl localhost:32345 

卸載

]# ansible-playbook -i inventory/mycluster/hosts.ini reset.yml 

遇到的問題

Calico網絡插件部署失效。這是Calico 3.2所帶來的問題,原因詳見:https://github.com/kubernetes-incubator/kubespray/issues/3223

解決方法:https://github.com/wilmardo/kubespray/commit/1c87a49d1443bcdd237500a714f1a60d680c1ad8 ,即:將Calico降級到3.1.3。

本文轉自開源中國-使用Kubespray部署生產可用的Kubernetes集群(1.11.2)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388895.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388895.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388895.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android webView 與 JS交互方式

webView 與JS交互 Android調用JS代碼的方法有&#xff1a; 通過WebView的loadUrl&#xff08;&#xff09;通過WebView的evaluateJavascript&#xff08;&#xff09; 對于JS調用Android代碼的方法有3種&#xff1a; 通過WebView的addJavascriptInterface&#xff08;&…

matlab軟件imag函數_「復變函數與積分變換」基本計算代碼

使用了Matlab代碼&#xff0c;化簡平時遇到的計算問題&#xff0c;也可以用于驗算結果來自211工科專業2學分復變函數與積分變換課程求復角主值sym(angle(待求復數))%公式 sym(angle(1sqrt(3)*i))%舉例代入化簡將 代入關于z的函數f(z)中并化解&#xff0c;用于公式法計算無窮遠點…

數據科學 python_為什么需要以數據科學家的身份學習Python的7大理由

數據科學 pythonAs a new Data Scientist, you know that your path begins with programming languages you need to learn. Among all languages that you can select from Python is the most popular language for all Data Scientists. In this article, I will cover 7 r…

[luoguP4142]洞穴遇險

https://www.zybuluo.com/ysner/note/1240792 題面 戳我 解析 這種用來拼接的奇形怪狀的東西&#xff0c;要不就是輪廓線\(DP\)&#xff0c;要不就是網絡流。 為了表示奇數點&#xff08;即\((xy)\%21\)&#xff09;的危險值&#xff0c;把該點拆為兩個點&#xff0c;連一條邊長…

飛信虛擬機

做完了一個圖片處理軟件,突然想到上次上網看到C#程序脫離.NET FRAMEWORK運行的文章,于是決定自己動手試一下。 之前看到有用別的方法來實現的&#xff0c;但我還是選擇了現在比較流行的軟件飛信中帶的VMDotNet&#xff0c;也就是所謂的.NET FRAMEWORK虛擬機吧。相信有很多人也已…

django的contenttype表

https://blog.csdn.net/aaronthon/article/details/81714496 這篇文章已經非常詳細了,供自己以后忘了...回看...... 總結&#xff1a; 當一張表和多個表FK關聯&#xff0c;并且多個FK中只能選擇其中一個或其中n個時&#xff0c;可以利用contenttype&#xff0c;固定用三個字段…

視頻播放問題和提高性能方案

1.Five symptoms of poor video performance 1.1 視頻加載緩慢 ?Perceived Wait Time Time to first frame (TTFF): ? 播放開始所需的adaptive bitrate(ABR)流媒體段的數量。(我們稍后將對此進行更詳細的討論。) ? 視頻請求發送到視頻加載之間的時間(即接收到足夠的數據…

rabbitmq 不同的消費者消費同一個隊列_RabbitMQ 消費端限流、TTL、死信隊列

消費端限流1. 為什么要對消費端限流假設一個場景&#xff0c;首先&#xff0c;我們 Rabbitmq 服務器積壓了有上萬條未處理的消息&#xff0c;我們隨便打開一個消費者客戶端&#xff0c;會出現這樣情況: 巨量的消息瞬間全部推送過來&#xff0c;但是我們單個客戶端無法同時處理這…

動量策略 python_在Python中使用動量通道進行交易

動量策略 pythonMost traders use Bollinger Bands. However, price is not normally distributed. That’s why only 42% of prices will close within one standard deviation. Please go ahead and read this article. However, I have some good news.大多數交易者使用布林…

css3 變換、過渡效果、動畫

1 CSS3 選擇器 1.1 基本選擇器 1.2 層級 空格 > .itemli ~ .item~p 1.3 屬性選擇器 [attr] [attrvalue] [attr^value] [attr$value] [attr*value] [][][] 1.4 偽類選擇器 :link :visited :hover :active :focus :first-child .list li:first-child :last-chi…

webservice 啟用代理服務器

您會發現你寫完了一個webservice在調用的時候發現怎也沒辦法調用&#xff0c;一個簡單的webservice怎么不能使用&#xff0c;一肚子的怨恨&#xff0c;哈哈您可能沒有為webservice設置代理。 下面就給您寫個調用的用例和大家分享下。其實很簡單&#xff0c;但是你沒有想到的時…

mysql常用的存儲引擎_Mysql存儲引擎

什么是存儲引擎&#xff1f;關系數據庫表是用于存儲和組織信息的數據結構&#xff0c;可以將表理解為由行和列組成的表格&#xff0c;類似于Excel的電子表格的形式。有的表簡單&#xff0c;有的表復雜&#xff0c;有的表根本不用來存儲任何長期的數據&#xff0c;有的表讀取時非…

android studio設計模式和文本模式切換

轉載于:https://www.cnblogs.com/judes/p/9437104.html

高斯模糊為什么叫高斯濾波_為什么高斯是所有發行之王?

高斯模糊為什么叫高斯濾波高斯分布及其主要特征&#xff1a; (Gaussian Distribution and its key characteristics:) Gaussian distribution is a continuous probability distribution with symmetrical sides around its center. 高斯分布是連續概率分布&#xff0c;其中心周…

C# webbrowser 代理

百度&#xff0c;google加自己理解后&#xff0c;將所得方法總結一下&#xff1a; 方法1&#xff1a;修改注冊表Software//Microsoft//Windows//CurrentVersion//Internet Settings下 ProxyEnable和ProxyServer。這種方法適用于局域網用戶&#xff0c;撥號用戶無效。 1p…

C MySQL讀寫分離連接串_Mysql讀寫分離

一 什么是讀寫分離MySQL Proxy最強大的一項功能是實現“讀寫分離(Read/Write Splitting)”。基本的原理是讓主數據庫處理事務性查詢&#xff0c;而從數據庫處理SELECT查詢。數據庫復制被用來把事務性查詢導致的變更同步到集群中的從數據庫。當然&#xff0c;主服務器也可以提供…

golang 編寫的在線redis 內存分析工具 rma4go

redis 內存分析工具 rma4go redis是一個很有名的內存型數據庫&#xff0c;這里不做詳細介紹。而rma4go (redis memory analyzer for golang) 是一個redis的內存分析工具&#xff0c;這個工具的主要作用是針對運行時期的redis進行內存的分析&#xff0c;統計redis中key的分布情…

從Jupyter Notebook到腳本

16 Aug: My second article: From Scripts To Prediction API8月16日&#xff1a;我的第二篇文章&#xff1a; 從腳本到預測API As advanced beginners, we know quite a lot: EDA, ML concepts, model architectures etc…… We can write a big Jupyter Notebook, click “Re…

【EasyNetQ】- 使用Future Publish調度事件

許多業務流程要求在將來某個日期安排事件。例如&#xff0c;在與客戶進行初次銷售聯系后&#xff0c;我們可能希望在將來的某個時間安排跟進電話。EasyNetQ可以通過其Future Publish功能幫助您實現此功能。例如&#xff0c;這里我們使用FuturePublish擴展方法來安排未來一個月的…

Java這些多線程基礎知識你會嗎?

0、并發和并行、進程核線程、多進程和多線程的區別&#xff1a; &#xff08;這里的時間和時刻上的概念同物理上的一樣&#xff09; 并發&#xff1a;在一段時間內多個任務同時執行&#xff0c;或者說是在一段很短的時間內可以執行多條程序指令&#xff0c;微觀上看起來好像是可…