1. 程式人生 > >【轉】使用Kubeadm快速搭建Kubernetes(docker)

【轉】使用Kubeadm快速搭建Kubernetes(docker)

版本說明

  1. kubernetes1.6
  2. docker1.12.6

環境準備

192.168.0.51 master 192.168.0.52 minion1 192.168.0.53 minion2

安裝docker

# 安裝yum-utils 管理yum repository及擴充套件包的工具
yum install -y yum-utils   
# 增加docker repository
yum-config-manager \
    --add-repo \
    https://docs.docker.com/v1.13/engine/installation/linux/repo_files/centos/docker.repo
# 下載包資訊到本地
yum makecache fast # 安裝docker-1.12.6 yum install -y docker-engine-1.12.6 # 啟動docker服務 systemctl start docker # 開機啟動docker systemctl enable docker

系統配置

建立/etc/sysctl.d/k8s.conf檔案,內容為:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

執行

sysctl -p /etc/sysctl.d/k8s.conf

在/etc/hostname中修改各節點的hostname

,在/etc/hosts中設定hostname對應非lo迴環網絡卡ip:

192.168.0.51 master
192.168.0.52 minion1
192.168.0.53 minion2

安裝kubeadm和kubelet

安裝kubeadm和kubelet需要技術梯子,或者通過以下兩種方法 1、通過修改/etc/hosts檔案新增IP *.google.com,比如

216.58.200.33  gcr.io
216.58.200.33  www.gcr.io
216.58.200.33  cloud.google.com
216.58.200.33  packages.cloud.google.com
216.58
.200.33 console.cloud.google.com 216.58.200.33 status.cloud.google.com 216.58.200.33 ssh.cloud.google.com

2、或者使用此方法:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo

輸入如下內容:

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF

安裝kubelet,kubeadm,kubectl

yum -y install socat kubelet-1.6.1 kubeadm-1.6.1 kubectl-1.6.1
systemctl enable kubelet.service

初始化叢集

上面的步驟每個node都需要執行,此步驟只在Master Node 執行。選擇192.168.0.51這臺作為Master Node,在此機器上

kubeadm init --kubernetes-version=v1.6.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.0.51

選擇flannel作為網路外掛,所以上面的命令指定--pod-network-cidr=10.244.0.0/16。初始化遇到問題時,使用下面的命令清理然後再初始化:

kubeadm reset
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/

不出意外Master Node 已初始化成功。此時檢視節點狀態 kubectl get nodes 會報 The connection to the server localhost:8080 was refused - did you specify the right host or port? 我們檢視kube-apiserver的監聽埠

[root@kube-master ~]# netstat -nltp | grep apiserver
tcp6       0      0 :::6443                 :::*                    LISTEN      5430/kube-apiserver

我們發現apiserver只監聽了6443埠,但是我們需要使用kubectl訪問apiserver,so 在~/.bash_profile追加下面的環境變數

export KUBECONFIG=/etc/kubernetes/admin.conf
# 使環境變數生效
source ~/.bash_profile

現在再試試kubectl get nodes 吧!

安裝Pod Network

安裝flannel network add-on 分兩種情況

1、只有一張網絡卡 直接執行

kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
kubectl apply -f  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

2、有多張網絡卡 執行

kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml
......
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: kube-flannel-ds
......
containers:
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.7.0-amd64
        command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=eth1" ]
......

eth1這裡換成自己的網絡卡名即可。建立flanneld

kubectl create -f {修改後的kube-flannel.yml路徑}
# 確保所有的Pod都處於Running狀態
kubectl get pod --all-namespaces -o wide

使Master Node 參與工作負載

一般不建議將Master Node參與負載,此時只為測試環境方便。

# 使Master Node參與工作負載
kubectl taint nodes --all  node-role.kubernetes.io/master-

測試

kubectl run curl --image=radial/busyboxplus:curl -i --tty
If you don't see a command prompt, try pressing enter.
[ root@curl-57077659-xgckw:/ ]$

進入後執行nslookup kubernetes.default確認DNS解析正常。

[ root@curl-57077659-xgckw:/ ]$ nslookup kubernetes.default
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local

如果正常解析,就大功告成啦!

# 刪除curl這個Pod
kubectl delete deploy cutl

向叢集中新增節點

根據上面的步驟安裝docker,kubelet套件。 在Master Node節點上執行

# 獲取token
kubeadm token list

在minion1上執行

# 關閉防火牆
systemctl stop firewalld
# 禁止防火牆開機啟動
systemctl disable firewalld
# 新增節點
kubeadm join --token ${token} ${master-ip}:6443

看到如下內容就說明我們已經成功向叢集中新增節點了!nice

kubeadm join --token a432c6.078b144b659c82b4 192.168.0.51:6443
-----  略略略  ----
Node join complete:
* Certificate signing request sent to master and response
  received.
* Kubelet informed of new secure connection details.

Run 'kubectl get nodes' on the master to see this machine join.

在Master Node上執行kubectl get nodes 確保所有的node是Ready的狀態。

問題總結

Q:Minion Node一直處於notReady狀態? A:主要有兩個原因:

1、啟動kubelet的時候,會pull兩個映象(gcr.io/**),因為GFW的存在,不能成功pull,所以要自己找到這兩個docker映象

gcr.io/google_containers/pause-amd64:3.0
gcr.io/google_containers/kube-proxy-amd64:v1.6.1

2、 使用Kubeadm工具搭建的Kubernetes叢集,已經預設集成了安全策略,所以要將Master Node節點/etc/kubernetes/pki下的所有檔案複製到Minion Node相同目錄下一份。所以在Master Node上執行

scp /etc/kubernetes/pki/* [email protected]{minion-ip}:/etc/kubernetes/pki

相關推薦

使用Kubeadm快速搭建Kubernetes(docker)

版本說明 kubernetes1.6docker1.12.6環境準備 192.168.0.51 master 192.168.0.52 minion1 192.168.0.53 minion2 安裝docker # 安裝yum-utils 管理yum repository及擴充套件包的工具 yum inst

使用webmagic搭建一個簡單的爬蟲

class 直接 了解 pid 個數 粘貼 body 教程 相關配置 【轉】使用webmagic搭建一個簡單的爬蟲 剛剛接觸爬蟲,聽說webmagic很不錯,於是就了解了一下。 webmagic的是一個無須配置、便於二次開發的爬蟲框架,它提供簡單靈活的API,只需少量代碼

如何快速識別應用MOS管,幾張圖片就搞定了

alt 通過 lan dia icm dji icp jpg http 三極管是流控型器件,MOS管是壓控型器件,兩者存在相似之處。三極管機可能經常用,但MOS管你用的可能較少。對於MOS管先拋出幾個問題: 如何區分P-MOS和N-MOS; 如何區分MOS的G、D、

Jenkins修改時區(Docker

問題 通過官方的jenkins容器執行jenkins服務,但是發現jenkins的時間與docker容器內的時間相同,但都與北京時間正好差8個小時。基本確定時區問題 檢視jenkins的docker容器時間: docker exec 檢視Jenkins的時間 在“jenk

SpringBoot2.快速搭建一個SpringBoot應用

上一篇部落格我們介紹了SpringBoot的概念,這裡我們通過快速搭建一個SpringBoot應用來體驗SpringBoot的特色。 1.建立工程 首先我們開啟MyEclipse,建立一個Maven工程: 然後選擇建立模式,這裡我們選擇不需要骨架: 最後填寫專案相關引數:

使用Docker搭建hadoop叢集

剛開始搭建Hadoop叢集的時候,使用的是VMware建立的虛擬機器。結果卡到心態爆炸。。。 今天嘗試使用Docker搭建hadoop叢集,發現是如此的好用快捷,也比使用VMware簡單。 在這裡記錄一下防止以後忘記,為以後的學習做準備。 1.獲取映象。 如果是本地使用VMware搭建的話,需

使用vue-cli搭建項目

cnblogs 安裝完成 配置 detail pack 文件夾 cache install 需要 vue-cli 是一個官方發布 vue.js 項目腳手架,使用 vue-cli 可以快速創建 vue 項目,GitHub地址是:https://github.com/vuejs

MYSQL-CLUSTER-7.5搭建數據庫集群

安裝教程 讀寫 固定 現在 note res 順序 遠程訪問 關閉 閱讀目錄 前言 mysql cluster中的幾個概念解釋 架構圖及說明 下載mysql cluster 安裝mysql cluster之前 安裝配置管理節點 安裝配置數據和mysql節點

搭建 Linux 下 GitLab 服務器

ssh認證 target libcurl 擁有 strong 部分 system shel tin 轉自:http://blog.csdn.net/passion_wu128/article/details/8216086 版權聲明:本文為博主原創文章,未經博主允許不

JMeter學習(二十九)使用Jmeter創建ActiveMQ JMS POINT TO POINT請求,環境搭建、請求創建、插件安裝、監聽服務器資源等

分布式 jndi 根目錄 point 啟動 lib .cn 轉載 p2p 最近要做公司消息中間件的性能測試,第一個想到的工具就是Jmeter了,網上簡單搜了一下,基本上都是WEB測試的居多,只好自己研究官方文檔了。 其中涉及Jmeter基本的術語或者概念,請自行參考官方文檔

idea激活搭建授權服務器

監聽 存在 命令 jid intel 本地 itl 作者 返回 1.下載軟件:磁力鏈接: magnet:?xt=urn:btih:2289E4F8CEB346AC44E54C8C0DA706CC537301AA 復制磁力鏈接地址 magnet:?xt=urn:btih

cocos2dx 3.x C++搭建protobuf環境

person ccf binding csdn bind taf protoc -cp strlen http://blog.csdn.net/ganpengjin1/article/details/50964961 Cocos2dx 裏面在網絡遊戲通信這一塊一般我們都會采

Linux下MySQL/MariaDB Galera集群搭建過程

分支 指定 util -1 令行 第一個 否則 alt 常見 MariaDB介紹 MariaDB是開源社區維護的一個MySQL分支,由MySQL的創始人Michael Widenius主導開發,采用GPL授權許可證。 MariaDB的目的是完全兼容MySQL,包括API

Golang (Go語言) Mac OS X下環境搭建 環境變量配置 開發工具配置 Sublime Text 2

trick blog mac os https 系統 document cnblogs strong os x 一、安裝Golang的SDK   在官網 http://golang.org/ 直接下載安裝包安裝即可。下載pkg格式的最新安裝包,直接雙擊運行,一路按照提示操作

在Win7的IIS上搭建FTP服務及用戶授權

其他 設置 AD 基本 pid 服務器 img blank post FTP服務 FTP是文件傳輸協議(File Transfer Protocol)的簡稱,該協議屬於應用層協議(端口號通常為21),用於Internet上的雙向文件傳輸(即文件的上傳和下載)。在網

Red5流服務器搭建(實現在線直播,流媒體視頻播放和在線視頻會議)

htm tps 實現 gho 共享 麥克風 一個 編碼工具 localhost 來自:http://blog.csdn.net/sunroyi666/article/details/52981639 一. 先介紹一下流媒體技術:所謂流媒體技術,是指將連續的影像和聲音信息經過

docker之Dockerfile實踐

b2c size ebe rem 目錄 all 緩存 local title 上一篇介紹了Dockerfile中使用的指令,現在開始進行指令實踐 先查看下本地的鏡像,選一個作為base image: [root@docker ~]# docker images REPO

Linux下RabbitMQ服務器搭建(單實例)

ble kernel ror com 使用 board lang and soc 閱讀目錄 系統環境 安裝步驟 註意事項 參考資料 回到頂部 系統環境 操作系統:CentOS6.9 erlang:OTP 19.3 rabbitmq:rabbitmq-serve

docker+jenkins+git持續部署實踐

ref workspace 重要 star ng- 匿名 web del 目錄 寫在前面 以前搭建spring-cloud的時候 看到別人代碼裏面總有Dockerfile,然後了解到docker容器的概念,玩了兩個星期玩不下去了,就放下了,無意間在網上看到一篇文章Docke

Java學習---快速掌握RPC原理及實現

消費者 阿裏 局限 kryo nes 很多 cal 網絡 href 【原文】https://www.toutiao.com/i6592365493435236872/ ?RPC概述 RPC(Remote Procedure Call)即遠程過程調用,也就是說兩臺服務器A,