1. 程式人生 > >在CentOS 7上安裝部署Kubernetes V1.10叢集 --Lank

在CentOS 7上安裝部署Kubernetes V1.10叢集 --Lank

在CentOS 7上安裝部署Kubernetes V1.10叢集

通過參考Google和官網等資料
使用kubeadm進行前期的安裝,本文無需科學上網
kubeadm是一個可以幫您以一種簡單、合理安全和可擴充套件的方式引導一個最佳實踐的Kubernetes叢集的工具。它還支援為您管理Bootstrap Tokens和升級/降級叢集

Before you begin.

 1. 準備三臺虛擬機器:一臺Master、兩臺node,安裝作業系統CentOS Linux release 7.2,(由於要連網際網路拉去相關映象,我們用vbox設定好網路,啟用NAT和host-only)。
 2. 系統配置(三節點都需執行) |可先建立一臺虛機配好系統引數後再克隆兩臺。

系統配置(三節點都有執行)

  • 關閉SELinux和防火牆:
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 修改配置永久生效,需重啟
setenforce 0
#關閉防火牆 
systemctl stop firewalld && systemctl disable firewalld
  • RHEL / CentOS 7上的某些使用者報告了由於iptables被繞過而導致流量被錯誤路由的問題。應該確保net.bridge.bridge-nf-call-iptables的sysctl配置中被設定為1
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
  • 關閉系統Swap:Kubernetes 1.8開始要求關閉系統的Swap,如果不關閉,預設配置下kubelet將無法啟動。方法一,通過kubelet的啟動引數–fail-swap-on=false更改這個限制。方法二,關閉系統的Swap。
swapoff -a

修改/etc/fstab檔案,註釋掉SWAP的自動掛載,使用free -m確認swap已經關閉。

Docker安裝與配置(三節點)

  • 安裝Docker
mkdir ~/k8s
cd k8s
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
yum install ./docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
yum install ./docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
systemctl enable docker
systemctl start docker
  • 配置Docker
    開啟iptables filter表的FORWARD鏈
    編輯/lib/systemd/system/docker.service,在ExecStart=..上面加入如下內容:
ExecStartPost=/usr/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
ExecStart=/usr/bin/dockerd
.....
  • 配置國內映象加速器。(如果可以科學上網此步可忽略)因為kubeadm預設要從google的映象倉庫下載映象,但目前國內無法訪問google映象倉庫,所以需要我們配置成國內的映象倉庫,並在kubeadm init前pull下所需的映象。

使用阿里雲映象加速器:阿里雲容器hub https://dev.aliyun.com/search.html;登入之後,進入管理中心–>映象加速器–>操作文件,根據提示進行設定即可。

坑點:此處網上大部分提升:將映象加速器網站配置到 /etc/docker/daemon.json,但是後期我pull映象發現,依然找的是國外的映象,花了一番功夫發現,需要在 /etc/systemd/system/multi-user.target.wants/docker.service裡修改。

`找到 ExecStart= 這一行,在這行最後新增加速器地址 --registry-mirror=<加速器地址> ` 
systemctl daemon-reload && systemctl restart docker && systemctl status docker
驗證:
docker info
或
ps -ef  | grep dockerd
如果從結果中看到了配置的 --registry-mirror 引數說明配置成功。

拉映象:

需要提前pull相關映象,否則 kubeadm init時會報錯,科學上網的可忽略。
master節點:

docker pull keveon/kube-apiserver-amd64:v1.10.0
docker pull keveon/kube-scheduler-amd64:v1.10.0
docker pull keveon/kube-controller-manager-amd64:v1.10.0
docker pull keveon/kube-proxy-amd64:v1.10.0
docker pull keveon/k8s-dns-kube-dns-amd64:1.14.8
docker pull keveon/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker pull keveon/k8s-dns-sidecar-amd64:1.14.8
docker pull keveon/etcd-amd64:3.1.12
docker pull keveon/flannel:v0.10.0-amd64
docker pull keveon/pause-amd64:3.1

docker tag keveon/kube-apiserver-amd64:v1.10.0 k8s.gcr.io/kube-apiserver-amd64:v1.10.0
docker tag keveon/kube-scheduler-amd64:v1.10.0 k8s.gcr.io/kube-scheduler-amd64:v1.10.0
docker tag keveon/kube-controller-manager-amd64:v1.10.0 k8s.gcr.io/kube-controller-manager-amd64:v1.10.0
docker tag keveon/kube-proxy-amd64:v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0
docker tag keveon/k8s-dns-kube-dns-amd64:1.14.8 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8
docker tag keveon/k8s-dns-dnsmasq-nanny-amd64:1.14.8 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker tag keveon/k8s-dns-sidecar-amd64:1.14.8 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8
docker tag keveon/etcd-amd64:3.1.12 k8s.gcr.io/etcd-amd64:3.1.12
docker tag keveon/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
docker tag keveon/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1

或執行以下指令碼:

#!/bin/bash
images=(kube-proxy-amd64:v1.10.0 kube-scheduler-amd64:v1.10.0 kube-controller-manager-amd64:v1.10.0 kube-apiserver-amd64:v1.10.0
etcd-amd64:3.1.12 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.8 k8s-dns-kube-dns-amd64:1.14.8
k8s-dns-dnsmasq-nanny-amd64:1.14.8)
for imageName in ${images[@]} ; do
  docker pull keveon/$imageName
  docker tag keveon/$imageName k8s.gcr.io/$imageName
  docker rmi keveon/$imageName
done

docker images 可檢視相關指令碼;

Node節點,在join節點之前也需要先下載到節點上面:

docker pull keveon/kube-proxy-amd64:v1.10.0
docker pull keveon/flannel:v0.10.0-amd64
docker pull keveon/pause-amd64:3.1
docker pull keveon/kubernetes-dashboard-amd64:v1.8.3
docker pull keveon/heapster-influxdb-amd64:v1.3.3
docker pull keveon/heapster-grafana-amd64:v4.4.3
docker pull keveon/heapster-amd64:v1.4.2

docker tag keveon/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
docker tag keveon/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1
docker tag keveon/kube-proxy-amd64:v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0
docker tag keveon/kubernetes-dashboard-amd64:v1.8.3 k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
docker tag keveon/heapster-influxdb-amd64:v1.3.3 k8s.gcr.io/heapster-influxdb-amd64:v1.3.3
docker tag keveon/heapster-grafana-amd64:v4.4.3 k8s.gcr.io/heapster-grafana-amd64:v4.4.3
docker tag keveon/heapster-amd64:v1.4.2 k8s.gcr.io/heapster-amd64:v1.4.2

或執行以下指令碼:

#!/bin/bash
images=(kube-proxy-amd64:v1.10.0 flannel:v0.10.0-amd64 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3
heapster-influxdb-amd64:v1.3.3 heapster-grafana-amd64:v4.4.3  heapster-amd64:v1.4.2)
for imageName in ${images[@]} ; do
  docker pull keveon/$imageName
  docker tag keveon/$imageName k8s.gcr.io/$imageName
  docker rmi keveon/$imageName
done

安裝配置kubernetes

  • 配置yum源並安裝

注:此小結三節點都要有

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

我們是安裝最新版本的,所以直接yum install -y kubeadm即可,它會安裝相應依賴包。

如果要指定版本,可以先看看有那些版本
yum list kubeadm --showduplicates
  • 配置kubelet
docker info 檢視 --cgroup-driver
確保kubelet的配置檔案/etc/systemd/system/kubelet.service.d/10-kubeadm.conf裡的--cgroup-driver的一致。
我們安裝的都是一致的無需修改

安裝完成後:

kubelet設定開機自動執行
systemctl enable kubelet

啟動kubelet:

systemctl start kubelet

此時系統日誌報錯可忽略,因為還沒有初始化。

使用kubeadm init初始化叢集

該小節僅在Master節點上執行

初始化節點是關鍵的一步,也有不少坑點,官網、有的網站給的命令不全或不成功,eg:

kubeadm init  --skip-preflight-checks --kubernetes-version=v1.10.0 --pod-network-cidr=10.244.0.0/16 

加version是為了避免time out ,pod-networ是我們後續節點間是使用flannel網路的預設配置,這兩項都需要新增,如果不成功我們通過/var/log/messages檢視相關資訊。
坑點:通過鍵入上述命令,一直會卡住,主要有兩點一個是我們沒有提前pull映象導致,kubeadm預設會從Google拉去映象,這對於我們沒有科學上網的人一開始可能會掉入此坑;再有一點,通過log日誌發現有類似資訊:

我們發現了一個問題,日誌裡的ip是我們訪問網際網路的ip地址,這明顯不是正確的配置,通過官網找到原因:

Unless otherwise specified, kubeadm uses the default gateway’s network interface to advertise the master’s IP. If you want to use a different network interface, specify –apiserver-advertise-address= argument to kubeadm init.

由於本機配了多個網口所以需要指定相應的ip地址。
初始化失敗清理命令:

kubeadm reset
  • 所以完整的命令是:
kubeadm init --apiserver-advertise-address 192.168.56.20 --pod-network-cidr=10.244.0.0/16  --kubernetes-version=v1.10.0

執行成功資訊:

這裡寫圖片描述

根據安裝成功後的資訊,進行相關操作,記下join段的資訊,由於別的節點新增至叢集使用。
To make kubectl work for your non-root user, you might want to run these commands (which is also a part of the kubeadm init output):

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 檢視叢集狀態
[[email protected] yum.repos.d]# kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
etcd-0               Healthy   {"health": "true"}   
controller-manager   Healthy   ok                   
scheduler            Healthy   ok                  
  • 安裝Pod Network
    注:該小節僅在Master節點上執行
    相當於部署應用的操作
$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
$ kubectl apply -f  kube-flannel.yml
clusterrole.rbac.authorization.k8s.io "flannel" created
clusterrolebinding.rbac.authorization.k8s.io "flannel" created
serviceaccount "flannel" created
configmap "kube-flannel-cfg" created
daemonset.extensions "kube-flannel-ds" created
如果你的節點有多個網絡卡的話,需要在kube-flannel.yml中使用–iface引數指定叢集主機內網網絡卡的名稱,否則可能會出現dns無法解析。flanneld啟動引數加上–iface=
 args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=enp0s8
安裝完成後: ` ifconfig驗證是否有flannel網路 ` 使用kubectl get pods命令可以檢視到我們叢集中的元件執行狀態:
[root@master ~]# kubectl get pod --all-namespaces
NAMESPACE     NAME                                    READY     STATUS    RESTARTS   AGE
default       curl-775f9567b5-69tlv                   1/1       Running   2          3d
default       httpd-app-77c9c8f99f-l4xct              1/1       Running   1          3d
default       httpd-app-77c9c8f99f-srr69              1/1       Running   1          3d
default       nginx-deployment-6b5c99b6fd-2b9lx       1/1       Running   1          3d
default       nginx-deployment-6b5c99b6fd-qtqxl       1/1       Running   2          3d
kube-system   etcd-master                             1/1       Running   13         4d
kube-system   heapster-676cc864c6-ggcgr               1/1       Running   1          3d
kube-system   kube-apiserver-master                   1/1       Running   1          1m
kube-system   kube-controller-manager-master          1/1       Running   7          4d
kube-system   kube-dns-86f4d74b45-swwb8               3/3       Running   6          3d
kube-system   kube-flannel-ds-9mljn                   1/1       Running   27         4d
kube-system   kube-flannel-ds-ffqxn                   1/1       Running   3          4d
kube-system   kube-proxy-9t2pw                        1/1       Running   2          4d
kube-system   kube-proxy-jsnsd                        1/1       Running   9          5d
kube-system   kube-scheduler-master                   1/1       Running   7          4d
kube-system   kubernetes-dashboard-7d5dcdb6d9-psld9   1/1       Running   1          3d
kube-system   monitoring-grafana-69df66f668-g6pzw     1/1       Running   1          3d
kube-system   monitoring-influxdb-78d4c6f5b6-d5prw    1/1       Running   1          3d
如果都是running狀態則表示master節點安裝成功了。(nginx和httpd是我後續安裝的,可忽略)
  • Master節點參與工作負載
    使用kubeadm初始化的叢集,出於安全考慮Pod不會被排程到Master Node上,可使用如下命令使Master節點參與工作負載。
kubectl taint nodes master  node-role.kubernetes.io/master-
  • 向Kubernetes叢集新增Node

Run the command that was output by kubeadm init. For example:

kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

A few seconds later, you should notice this node in the output from kubectl get nodes when run on the master.

[root@master ~]# kubectl get nodes
NAME      STATUS    ROLES     AGE       VERSION
master    Ready     master    5d        v1.10.0
node1     Ready     <none>    5d        v1.10.0

同理加入另一個節點。

部署Dashboard外掛

待續

相關推薦

CentOS 7安裝部署Kubernetes V1.10叢集 --Lank

在CentOS 7上安裝部署Kubernetes V1.10叢集 通過參考Google和官網等資料 使用kubeadm進行前期的安裝,本文無需科學上網 kubeadm是一個可以幫您以一種簡單、合理安全和可擴充套件的方式引導一個最佳實踐的Kub

【Redis】2、CentOS 7 安裝 redis3.2.3安裝與配置

sync 倉庫 ace /var/ 發現 wan sudo base str 一、redis源碼安裝 【更正】現在最新穩定的版本已經到了3.2.8 截至到2016.8.11,redis最新穩定版本為3.2.3.本篇文章我們就以此版本為基礎,進行相關的講解。 下載redis源

CentOS 7安裝Jenkins

在centos 7上安裝jenkins在CentOS 7上安裝Jenkins安裝添加yum repos,然後安裝sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/RedHat/jenkins.repo sudo rpm -

Centos 7 安裝Samba的詳細步驟

samba 為了實現Windows主機與Linux服務器之間的資源共享,Linux操作系統提供了Samba服務,Samba服務為兩種不同的操作系統架起了一座橋梁,使Linux系統和Windows系統之間能夠實現互相通信,為廣泛的Linux愛好者提供了極大方便。本文簡要介紹如何在Linux操作系統上搭建S

CentOS 7安裝Zabbix(高速安裝監控工具Zabbix)

none clas smooth 安裝zabbix www edi cti php配置 copy 前提要求(optional) 安裝Zabbix監控工具前,先安裝必要的執行工具包 yum install gcc gcc-c++ make open

Centos 7安裝Python3.x

鏈接 open python2 下載 檢驗 ges lib sta 備份 Centos7默認安裝的是2.7,這裏選擇安裝使用Python3.6.3 安裝Python3.6.3 1、安裝python3 需要的依賴包 yum install -y openssl-devel

如何在CentOS 7安裝OroCRM

OroCRM是在OroPlatform上建立的一個免費的開源客戶關系管理器(CRM)應用。OroPlatform是完全可定制的開源商業應用平臺軟件。OroPlatform提供了創建自定義應用程序所需的所有特性。OroCRM是使用PHP Symfony框架構建的,並將其數據存儲到MySQL /

CentOS 7安裝Kafka

conf nproc 修改 ofo hup mit zook group 解壓 參考博文:https://www.mtyun.com/library/how-to-install-kafka-on-centos7 一、安裝準備1、修改系統配置#關閉selinux、firew

CentOS 7安裝MongoDB

exe ise $path http pri 1.2 修改環境變量 https mkdir -p 參考博文:https://www.jianshu.com/p/ccdd3e884b86 一、安裝準備1、修改系統配置#關閉selinux、firewall#修改/etc/sec

CentOS 7安裝Kafka集群

rop conf path nec zookeeper centos 7 top $path dir 一、安裝準備1、修改系統配置#關閉selinux、firewall#修改/etc/security/limits.conf添加以下內容: soft nofile

Centos 7 安裝jira7.3及破解

mysql- software 1.2 現在 fig 1.5 extra color -s 一、環境準備1,jira7.2的運行是依賴java環境的,也就是說需要安裝jdk並且要是1.8以上版本,如下: 2,安裝MySQL服務器安裝MySQL的yum源 # yu

騰訊雲CentOS 7 安裝Nginx

lease 安裝nginx sta add ref roo AD 傳輸 als 以下安裝步驟需要root權限。 添加CentOS 7 EPEL 倉庫 sudo yum install epel-release 安裝Nginx sudo yum install nginx

CentOS 7安裝部署Zabbix3.4

zabbix zabbix3.4 centos7 Zabbix安裝: 環境: 系統環境:CentOS 7Zabbix版本:Zabbix 3.4 安裝步驟: 關閉防火墻和SELINUXsystemctl stop firewalld && setenforce 0 安裝zabb

Kafka安裝之二 在CentOS 7安裝Kafka

系統 Kafka集群 kafka 客戶 結合 支持 用戶 消息處理 from 一、簡介 Kafka是由Apache軟件基金會開發的一個開源流處理平臺,由Scala和Java編寫。Kafka是一種高吞吐量的分布式發布訂閱消息系統,它可以處理消費者規模的網站中的

如何在CentOS 7安裝Nginx

正在 zone 系統 service 圖片 reload posit wal OS 第一步 - 添加Nginx存儲庫 要添加CentOS 7 EPEL倉庫,請打開終端並使用以下命令: sudo yum install epel-release 第二步 - 安裝Nginx

CentOS 7安裝 MongoDB數據庫 4.0.0最新版

code 需要 可執行文件 效率 敏捷 查詢 下載 中文 同時 MongoDB簡介 MongoDB(來自於英文單詞“Humongous”,中文含義為“龐大”)是可以應用於各種規模的企業、各個行業以及各類應用程序的開源數據庫。作為一個適用於敏捷開發的數據庫,MongoDB的數

Centos 7安裝新版數據庫Oracle12c

red 外連接 工作 運行 windows 密碼 防止 lang bash Oracle 是一個數據庫管理系統,是Oracle公司的核心產品。其在數據安全性與安整性控制方面的優越性能,以及跨操作系統、跨硬件平臺的數據操作能力。基於“客戶端/服務器”(Client/Serve

CentOS 7安裝Python 3.6.1

ret 例如 應用程序 rap 發包 pda code inux wget CentOS 7默認安裝了Python 2.7,系統本身也使用它來啟用系統命令例如‘yum’ 雖然作為開發人員我可以用Python 2.7做很多事情,但我真的想要利用Python 3附帶的新語言功能

CentOS 7 安裝vim 解決 centos -bash: vim: command not found

如果 cti 簡單 UNC func command 直接 vim 命令 bsp 用CentOS上使用vim竟然用不了,報錯沒有該命令 centos -bash: vim: command not found 那麽如何安裝 vim 呢? -----------------

CentOS 7 安裝Oracle 12c 【贈安裝包】

ack 工具 設置環境變量 最新版 關系數據庫 全局 chmod 操作 img Oracle 概述 Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關系數據庫管理系統。它是在數據庫領域一直處於領先地位的產品。可以說Ora