中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

本機(jī)搭建三節(jié)點k8s集群

2018-11-20    來源:importnew

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

畢業(yè)設(shè)計題目是寫一個基于微服務(wù)的高可用應(yīng)用系統(tǒng)。微服務(wù)的部署使用 docker + k8s,所以前提是要有一個 k8s 集群。搭建過程中遇到了一些坑,把整個流程 記錄下來一是回顧搭建過程,二是希望能盡可能的幫助后來的 k8s beginners 少走些彎路。

本文的側(cè)重點在實際操作,k8s 組件基本概念相關(guān)的信息請參考?k8s 官方文檔?或?Kubernetes 指南 – by feiskyer

如果對于本文有什么建議、意見及疑問,歡迎提 issue,或直接發(fā)郵件交流(郵箱很容易能找到,不再提供)。

環(huán)境依賴

本文假設(shè)讀者會使用 Linux 命令行。

k8s 的鏡像源在墻外,所以需要讀者掌握科學(xué)上網(wǎng)的技能。這個部分不屬于本文的描述范圍,我使用的方案是 Shadowsocks + Privoxy,有需要可以跟我交流。

- Docker    : 1.13.1
- kube*     : 1.10
- flannel   : 0.10.0
- virtualBox: 5.2.8
- OS        : ubuntu-16.04.4-server-amd64.iso

virtualBox 的版本不太重要,Docker 和 kube* 的版本最好使用 k8s 推薦的版本,否則可能會有問題,推薦的 Docker 版本可以在版本的?release?文檔中查看。OS 的版本不同,后面的一些配置的方法會略有不同。

搭建目標(biāo)

主機(jī)名 主機(jī) IP flannel.1 OS 集群角色
master 192.168.99.200 10.244.0.0 Ubuntu 16.04 master
node1 192.168.99.201 10.244.1.0 Ubuntu 16.04 node
node2 192.168.99.202 10.244.2.0 Ubuntu 16.04 node

flannel.1 是 每臺機(jī)器上的一個 VNI,通過?ifconfig?命令可以查看該接口的信息。

從任意一臺機(jī)器 ping 另外兩臺機(jī)器 flanel.1 的 IP 能通就算集群搭建成功。

# from master
$ ping 10.244.1.0
PING 10.244.1.0 (10.244.1.0) 56(84) bytes of data.
64 bytes from 10.244.1.0: icmp_seq=1 ttl=64 time=0.659 ms
64 bytes from 10.244.1.0: icmp_seq=2 ttl=64 time=0.478 ms
64 bytes from 10.244.1.0: icmp_seq=3 ttl=64 time=0.613 ms
^C
--- 10.244.1.0 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.478/0.583/0.659/0.079 ms

$ ping 10.244.2.0
PING 10.244.2.0 (10.244.2.0) 56(84) bytes of data.
64 bytes from 10.244.2.0: icmp_seq=1 ttl=64 time=0.459 ms
64 bytes from 10.244.2.0: icmp_seq=2 ttl=64 time=0.504 ms
64 bytes from 10.244.2.0: icmp_seq=3 ttl=64 time=0.553 ms
^C
--- 10.244.2.0 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2058ms
rtt min/avg/max/mdev = 0.459/0.505/0.553/0.042 ms

k8s 個組件之間的關(guān)系

其實這個沒必要多說,Kubernetes Components?或?Kubernetes 核心組件 – by feiskyer?講的已經(jīng)非常好了,這里提到只是強(qiáng)調(diào)一下這部分的重要性。

k8s Pod 網(wǎng)絡(luò)模型簡介

  • 圖片來源:一次Flannel和Docker網(wǎng)絡(luò)不通定位問題

為了省事,我直接引用了別人畫的模型圖。對于本次搭建的集群模型簡單描述如下:

  1. cni0?和?flannel.1?都是 VNI,由 flannel 組件創(chuàng)建,集群搭建完成后可以通過?ifconfig?進(jìn)行查看。
  2. flannel 組件 在每臺機(jī)器上運行了一個?flanneld,它是用來轉(zhuǎn)發(fā)流量,解決主機(jī)間通信的問題。
  3. enp0s8?是 virtualBox 的 Host-Only 適配器。

配置流程

使用 virtualBox 創(chuàng)建三臺虛擬機(jī)

virtualBox 安裝比較簡單,不再介紹,GUI 工具用起來也很方便,這部分只介紹我認(rèn)為需要提示的部分。

  1. 內(nèi)存推薦 2048M, CPU 推薦 2個
  2. 默認(rèn)只有一個 NAT 適配器,添加一個 Host-Only Adapter。NAT 適配器是虛擬機(jī)用來訪問互聯(lián)網(wǎng)的,Host-Only 適配器是用來虛擬機(jī)之間通信的。
  3. 以 Normal Start 方式啟動虛擬機(jī)安裝完系統(tǒng)以后,因為是 server 版鏡像,所以沒有圖形界面,直接使用用戶名密碼登錄即可。
  4. 修改配置,enp0s8?使用靜態(tài) IP。配置請參考?SSH between Mac OS X host and Virtual Box guest。注意配置時將其中的網(wǎng)絡(luò)接口名改成你自己的 Host-Only Adapter 對應(yīng)的接口。
  5. 一臺虛擬機(jī)創(chuàng)建完成以后可以使用 clone 方法復(fù)制出兩臺節(jié)點出來,注意 clone 時為新機(jī)器的網(wǎng)卡重新初始化 MAC 地址。
  6. 三臺虛擬機(jī)的靜態(tài) IP 都配置好以后就可以使用 ssh 在本地主機(jī)的終端上操作三臺虛機(jī)了。虛機(jī)使用 Headless Start 模式啟動

安裝 Docker

  • 三臺都裝

當(dāng)前 Ubuntu 的 docker 版本剛好合適,所以可以直接安裝,但是有必要提前查看一下 docker 版本,以免裝錯。

# apt search docker.io
apt-get update
apt-get install -y docker.io
systemctl enable docker
systemctl start docker

official Docker installation guides

  • docker 配置代理。鏡像源在墻外,docker pull image 需要代理
mkdir -p /etc/systemd/system/docker.service.d

cat <<EOF >/etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=https://192.168.99.1:8118/"
Environment="HTTPS_PROXY=https://192.168.99.1:8118/"
Environment="NO_PROXY=localhost,127.0.0.1,localaddress,.localdomain.com"
EOF

systemctl daemon-reload
systemctl restart docker
  • 測試配置
docker info | grep Proxy  # 有輸出說明配置成功

docker pull gcr.io/google-containers/busybox:1.27 # pull 成功代表工作正常。
  • Google 鏡像庫

安裝 kube* 組件

  • 三臺都裝
apt-get update && apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
systemctl enable kubelet
systemctl start kubelet
  • Master 節(jié)點配置 cgroup driver
docker info | grep -i cgroup  # 一般是 cgroupfs
cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf  # --cgroup-driver 對應(yīng)值默認(rèn)是 systemd

#兩個值不一致的話使用以下命令修改
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

#重啟 kubelet
systemctl daemon-reload
systemctl restart kubelet
  • curl 訪問的是墻外的網(wǎng)站,無法訪問的話可以配置系統(tǒng)代理。

http://192.168.99.1:8118/?是我本地使用的 HTTP 代理,Privoxy 監(jiān)聽 8118 端口,按照實際情況修改該地址。

# 全局代理,不推薦
cat <<EOF >>/etc/environment
http_proxy="http://192.168.99.1:8118/"
https_proxy="http://192.168.99.1:8118/"
no_proxy="master, node1, node2, 192.168.99.1"
EOF
source /etc/environment

#當(dāng)前 shell,推薦
export http_proxy="http://192.168.99.1:8118/"
export https_proxy="http://192.168.99.1:8118/"
export no_proxy="master, node1, node2, 192.168.99.1"
  • apt?使用代理
cat <<EOF >>/etc/apt/apt.conf
Acquire::http::Proxy "http://192.168.99.1:8118/";
Acquire::https::Proxy "https://192.168.99.1:8118/";
EOF

搭建集群

禁用交換區(qū)

k8s 文檔明確要求的。

  • 三臺都禁用
swapoff -a

初始化 master 節(jié)點

  • 初始化過程會訪問墻外網(wǎng)站,如果 init 不能順利執(zhí)行,請配置全局代理
kubeadm init --apiserver-advertise-address=192.168.99.200 --pod-network-cidr=10.244.0.0/16
  1. --apiserver-advertise-address=192.168.99.200?綁定 apiserver 到 master 節(jié)點的 Host-Only 適配器的地址,默認(rèn)是綁到 NAT 的地址上,這樣其他機(jī)器是永遠(yuǎn)也訪問不到的。
  2. --pod-network-cidr=10.244.0.0/16?指定 pod 網(wǎng)絡(luò)地址空間,我們使用 flannel 組件必須使用這個空間。
  3. kubeadm 的完整參考手冊?kubeadm reference guide
  4. 推薦保存最后輸出的 join 命令到文件(以免忘記或找不到了),方便添加節(jié)點到集群。如果忘了也找不到輸出了,網(wǎng)上有方法生成哈希值,請自行查找。
  • 配置 kubectl 訪問集群
# root user
export KUBECONFIG=/etc/kubernetes/admin.conf

# non-root user
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 從本地主機(jī)操作,需要在本地安裝 kubectl 客戶端
mkdir -p ~/.kube

scp <username>@192.168.99.200:/home/<username>/.kube/config ~/.kube/config # 從 master 復(fù)制配置文件到本地
  • 測試配置
kubectl cluster-info #有正常輸出即可

安裝 flannel 網(wǎng)絡(luò)

  • flannel 默認(rèn)的監(jiān)聽接口是 NAT 適配器的接口,我們需要的是 Host-Only 適配器的接口,所以需要修改 kube-flannel.yml 文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

給 /opt/bin/flanneld 命令添加 --iface="enp0s8" 參數(shù) # enp0s8 是 Host-Only 適配器對應(yīng)的接口

kubectl apply -f kube-flannel.yml
  • 測試配置
kubectl get pods --all-namespaces -o wide # 稍等一會,下載鏡像需要一定時間,最后應(yīng)該顯示 flannel pods 是 Running 狀態(tài), kube-dns 也是 Running 狀態(tài)
  • 消除 master 隔離。默認(rèn) master 上不調(diào)度 pods,要允許另外的 pods 在 master 上運行請執(zhí)行該命令
kubectl taint nodes --all node-role.kubernetes.io/master-

添加節(jié)點到集群

  • 在節(jié)點上執(zhí)行?kubeadm init?最后輸出的 join 命令
kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>

最后

feiskyer 為該搭建過程寫了自動化腳本,有興趣可以嘗試一下。

參考

  1. k8s 官方文檔
  2. Kubernetes 指南 – by feiskyer
  3. 一次Flannel和Docker網(wǎng)絡(luò)不通定位問題
  4. coreos/flannel – README
  5. Installing kubeadm
  6. Docker Ubuntu Behind Proxy
  7. Using kubeadm to Create a Cluster

標(biāo)簽: dns Google linux swap 互聯(lián)網(wǎng) 腳本 通信 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Java字節(jié)碼結(jié)構(gòu)剖析二:字段表

下一篇:Java調(diào)試檢查表