手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)

環境說明

操做系統:CentOS7
Kubernetes版本:v1.8.4
Docker版本:v17.06-ce
Flannel 版本: flannel-v0.9.1node

Ntp 服務器配置

時間同步很重要linux

[root@node1 ~]#  yum install ntp-server -y
[root@node1 ~]# systemctl start ntpd && systemctl enable ntpd
# yum install  ntpdate  -y                 
#重要:時間同步 (每一個節點都要操做不然會有意想不到的驚喜)
# echo 「*/5 * * * * /usr/sbin/ntpdate  192.168.31.221   > /dev/null 2>&1 &」  >>/etc/crontab
# /usr/sbin/ntpdate   192.168.31.221        #手動同步一次
角色 IP 組件
maser 192.168.31.221 kube-apiserver
kube-controller-manager
kube-scheduler
Flannel
kubelet
Node1 192.168.31.222 kube-proxy
docker
Flannel
kubelet
Node2 192.168.31.223 kube-proxy
kubelet
kubelet

Flannel概述

Flannel 是 CoreOS 團隊針對 Kubernetes 設計的一個網絡規劃服務,簡單來講,它的功能是讓集羣中的不一樣節點主機建立的Docker 容器都具備全集羣惟一的虛擬IP地址。但在默認的Docker配置中,每一個節點上的 Docker 服務會分別負責所在節點容器的 IP 分配。這樣致使的一個問題是,不一樣節點上容器可能得到相同的內外 IP 地址。並使這些容器之間可以之間經過 IP 地址相互找到,也就是相互 ping 通。nginx

Flannel 的設計目的就是爲集羣中的全部節點從新規劃IP地址的使用規則,從而使得不一樣節點上的容器可以得到「同屬一個內網」且」不重複的」IP 地址,並讓屬於不一樣節點上的容器可以直接經過內網 IP 通訊。
Flannel實質上是一種「覆蓋網絡(overlay network)」,也就是將 TCP 數據包裝在另外一種網絡包裏面進行路由轉發和通訊,目前已經支持UDP、VxLAN、AWS VPC和GCE路由等數據轉發方式。docker

一.安裝docker

1.設置 yum 倉庫json

tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

2.執行安裝centos

yum -y install docker-engine

3.設置開機啓動api

systemctl  start docker  && systemctl enable docker

4.添加 Docker Hub 國內鏡像服務器

若是沒有此文件,則新建一個網絡

vi /etc/docker/daemon.json
{
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

5.重啓 dockerapp

systemctl  restart docker             #重啓docker

6.設置 hosts 及 hostname

[root@node1 ~]#  vi /etc/hosts
192.168.31.221 node1 node1.example.com
192.168.31.222 node2 node2.example.com
192.168.31.223 node3 node3.example.com

[root@node1 ~]# hostnamectl  set-hostname   node1.example.com
[root@node2~]# hostnamectl  set-hostname   node2.example.com
[root@node3 ~]# hostnamectl  set-hostname   node3.example.com

二.給 docker 配置 Flannel 網絡

1.Master 節點 etcd 配置

Etcd 安裝配置 (這裏作的單節點 ETCD 只在 Master 節點安裝)

[root@node1 ~]#  yum install  etcd -y 
[root@node1 ~]#   vi /etc/default/etcd
ETCD_DATA_DIR="/var/lib/etcd/default"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
[root@node1 ~]# sed -i 's/localhost/0.0.0.0/g'  /etc/etcd/etcd.conf
[root@node1 k8s]# systemctl  start  etcd  && systemctl enable etcd

手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)
etcd 建立 Flannel 網絡

[root@node1 ~]# etcdctl --endpoints http://192.168.31.221:2379  \
set /coreos.com/network/config '{"NetWork":"10.0.0.0/16"}'

2.安裝 flannel 軟件並設置 docker 參數
(其餘 node 節點 flannel 網絡也照着這樣配置)
使用軟件包: flannel-v0.9.1.tar.gz (分享完會附帶資料)

[root@node1 ~]# tar -zxvf  flannel-v0.9.1.tar.gz
[root@node1 ~]# cd flannel-v0.9.1
[root@node1 flannel-v0.9.1]# cp flanneld  mk-docker-opts.sh  /usr/local/bin/  
[root@node1 flannel-v0.9.1]# cd conf/
[root@node1 conf]# cp *.service  /usr/lib/systemd/system          #覆蓋docker 的啓動腳本
[root@node1 conf]# cp flanneld  /etc/sysconfig/
[root@node1 conf]# vi /etc/sysconfig/flanneld                    #修改 本身的etcd 服務器地址

# Flanneld configuration options
# etcd url location.  Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://192.168.31.221:2379"
# etcd config key.  This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_KEY="/coreos.com/network"
FLANNEL_OPTIONS="--etcd-endpoints=http://192.168.31.221:2379  --ip-masq=true"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""

最後重啓 flannel 和 docker

systemctl daemon-reload
systemctl start flanneld   && systemctl enable flanneld 
systemctl restart docker

成功狀態

ifconfig docker0 |grep  inet && ifconfig flannel0 |grep inet

手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)
手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)

三個節點 docker 網絡都照這樣配置

三.Kubernetes 集羣配置

使用軟件包:
kubernetes-v1.8.4.tar.gz
#軟件包分發到各個節點上

1.Master 節點配置:

[root@node1 ~]# tar -zxvf  kubernetes-v1.8.4.tar.gz
[root@node1 ~]# mkdir -p /opt/kubernetes/{bin,cfg}            #配置文件和二進制文件目錄
[root@node1 ~]# cd kubernetes-v1.8.4/
[root@node1 kubernetes-v1.8.4]# tar -zxvf kubernetes-server-linux-amd64.tar.gz
[root@node1 kubernetes-v1.8.4]# cd kubernetes/server/bin/
[root@node1 bin]# cp  kube-apiserver kube-controller-manager kube-scheduler kubectl /opt/kubernetes/bin
[root@node1 bin]# cd ../../../
[root@node1 kubernetes-v1.8.4]# ./apiserver.sh 192.168.31.221 http://192.168.31.221:2379
[root@node1 kubernetes-v1.8.4]# ./scheduler.sh 192.168.31.221
[root@node1 kubernetes-v1.8.4]# ./controller-manager.sh 192.168.31.221
[root@node1 kubernetes-v1.8.4]# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
[root@node1 kubernetes-v1.8.4]# source  /etc/profile
[root@node1 kubernetes-v1.8.4]# netstat  -tunlp           #查看服務是否啓動

手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)
2.Node1 節點上配置

[root@node2 ~]#  swapoff   -a  #禁止交換分區
[root@node2 ~]# mkdir -p /opt/kubernetes/{bin,cfg}
[root@node2 ~]# tar -zxvf  kubernetes-v1.8.4.tar.gz
[root@node2 ~]# cd kubernetes-v1.8.4
[root@node2 kubernetes-v1.8.4]# tar -zxvf kubernetes-node-linux-amd64.tar.gz 
[root@node2 kubernetes-v1.8.4]# cd kubernetes/node/bin/
[root@node2 bin]# cp kubelet kube-proxy /opt/kubernetes/bin
[root@node2 bin]# cd ../../../
[root@node2 kubernetes-v1.8.4]# ./kubelet.sh 192.168.31.221 192.168.31.222 10.10.10.2
[root@node2 kubernetes-v1.8.4]# ./proxy.sh 192.168.31.221 192.168.31.222
[root@node2 kubernetes-v1.8.4]# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
[root@node2 kubernetes-v1.8.4]# source  /etc/profile

3.Node2 節點上配置

[root@node3 ~]#  swapoff   -a  #禁止交換分區
[root@node3 ~]# mkdir -p /opt/kubernetes/{bin,cfg}
[root@node3 ~]# tar -zxvf  kubernetes-v1.8.4.tar.gz
[root@node3 ~]# cd kubernetes-v1.8.4
[root@node3 kubernetes-v1.8.4]# tar -zxvf kubernetes-node-linux-amd64.tar.gz 
[root@node3 kubernetes-v1.8.4]# cd kubernetes/node/bin/
[root@node3 bin]# cp kubelet kube-proxy /opt/kubernetes/bin
[root@node3 bin]# cd ../../../
[root@node3 kubernetes-v1.8.4]# ./kubelet.sh 192.168.31.221 192.168.31.223 10.10.10.2
[root@node3 kubernetes-v1.8.4]# ./proxy.sh 192.168.31.221 192.168.31.223
[root@node3 kubernetes-v1.8.4]# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
[root@node3 kubernetes-v1.8.4]# source  /etc/profile

4.查看集羣狀態:

[root@node1 ~]# kubectl get node
手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)

5.集羣管理

kubelet 在建立 pod 時會先下載一個 pause 鏡像,這個鏡像用於容器基礎網絡管理
每一個 node 節點都要執行該操做(鏡像若是下載不下來,咱們所有分享完,會把完整資料也分享給你們):

docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0   
docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

導入鏡像:
docker load -i pause-amd64.tar.gz
很是重要: 防火牆
iptables -P FORWARD ACCEPT
iptables-save
每一個節點都要執行,不然通信會有問題

測試集羣網絡是否正常通信

[root@node1 ~]# cat busybox.yamlapiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    command:
      - ping  
      - "114.114.114.114"
    imagePullPolicy: IfNotPresent
    name: busybox
  restartPolicy: Always
[root@node1 ~]# kubectl create -f busybox.yaml

手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)

手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)
測試每一個節點是否能 ping 通 容器 ip,能 ping 通說明正常

6.服務發現 DNS

kubedns-deployment.yaml kubedns-svc.yaml
兩個文件本文檔會附帶(若是dns相關鏡像下載不下來,分享完會帶示例)
手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)

三個鏡像導入而後再建立便可,每一個節點上都要導入

kubedns-deployment.yaml
- --kube-master-url=http://192.168.31.221:8080   #改地址要改爲本身的地址

[root@node1 ~]# kubectl  create -f  kubedns-svc.yaml
[root@node1 ~]# kubectl  create -f  kubedns-deployment.yaml 
[root@node1 ~]#  kubectl get pods --namespace=kube-system -l k8s-app=kube-dns

手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)
建立 nginx 服務進行測試

[root@node1 ~]# kubectl create -f  nginx-service.yaml
[root@node1 ~]# kubectl create -f  nginx-deployment.yaml
[root@node1 ~]# kubectl  exec  busybox  -it  nslookup  nginx-service

手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)

[root@node1 ~]# kubectl get  svc

手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)
7.kubernetes-dashboard
手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)

節點上導入該鏡像

kubernetes-dashboard.yaml  #建立darshboard實例
[root@node1 ~]# vi   kubernetes-dashboard.yaml
- --apiserver-host=http://192.168.31.221:8080      #改成本身的apiserver
[root@node1 ~]# kubectl  create -f kubernetes-dashboard.yaml
[root@node1 ~]# kubectl get pods --namespace=kube-system

手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)

[root@node1 ~]# kubectl get svc  --namespace=kube-system

手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)

手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)
手把手教你構建 Kubernetes 1.8 + Flannel 網絡(一)

原文連接:http://t.cn/RHVYQOU未完待續.......明天繼續給你們分享後續的操做步驟,分享完成後會把完整的詳細的資料都給你們,謝謝你們一致以來的支持。

相關文章
相關標籤/搜索