Docker Kubernetes 環境搭建


Docker Kubernetes 環境搭建

節點規划

  • 版本
  • 系統:Centos 7.4 x64
  • Docker版本:18.09.0
  • Kubernetes版本:v1.8
  • etcd存儲版本:etcd-3.2.22
  • 部署
  • 管理節點:192.168.1.79
  • 安裝插件:etcd
  • 安裝插件:kube-apiserver
  • 安裝插件:kube-controller-manager
  • 安裝插件:kube-scheduler
  • 工作節點:192.168.1.78
  • 安裝插件:kubelet
  • 安裝插件:kube-proxy
  • 安裝插件:docker
  • 工作節點:192.168.1.77
  • 安裝插件:kubelet
  • 安裝插件:kube-proxy
  • 安裝插件:docker

Kubernetes 部署方式

1、kubeadm工具快捷安裝kubernetes集群。kubeadm工具安裝會屏蔽很多細節。

2、通過kubernetes二進制包安裝。

注:這里我采用第2種,由於安裝環境繁瑣,將事先編譯好的Kubernetes工具包來進行環境部署。

  • kubernetes工具包:https://pan.baidu.com/s/1xvAadiCZmxKs22Zpqw3VNQ
  • 密碼:pyjq

1、管理節點:安裝etcd存儲

1.1、安裝etcd存儲

yum install etcd -y

1.2、編輯配置文件添加配置參數

vim /etc/etcd/etcd.conf

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379

1.3、重啟服務,添加開機自啟動

systemctl enable etcd
systemctl restart etcd

1.4、查看監聽端口

netstat -antp | grep etcd
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 15737/etcd
tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 15737/etcd
tcp 0 0 127.0.0.1:2379 127.0.0.1:59936 ESTABLISHED 15737/etcd
tcp 0 0 127.0.0.1:59936 127.0.0.1:2379 ESTABLISHED 15737/etcd 
輸出

 


2、管理節點:安裝kubernetes Master 運行節點組織

2.1、解壓master包加入執行文件

unzip master.zip;chmod +x *

2.2、創建目錄

mkdir /opt/kubernetes/{bin,cfg} -p

2.3、將壓縮文件kube移動到bin目錄下

mv kube-apiserver kube-controller-manager kube-scheduler kubectl /opt/kubernetes/bin

2.4、修改apiserver.sh、controller-manager.sh、scheduler.sh腳本文件

vim apiserver.sh

# Mster監聽地址IP
MASTER_ADDRESS=${1:-"192.168.1.79"}
# ETCD數據庫服務地址
ETCD_SERVERS=${2:-"http://192.168.1.79:2379"}

vim controller-manager.sh

# Mster監聽地址IP
MASTER_ADDRESS=${1:-"192.168.1.79"}

vim scheduler.sh

# Mster監聽地址IP
MASTER_ADDRESS=${1:-"192.168.1.79"}

2.5、運行kubernetes啟動腳本 masterIP地址默認端口8080 加etcd地址

./apiserver.sh 192.168.1.79 http://192.168.1.79:2379
命令:ps -ef | grep kube

root 16724 1 99 15:47 ? 00:00:02 /opt/kubernetes/bin/kube-apiserver --logtostderr=true --v=4 --etcd-servers=http://192.168.1.97:2379 --storage-backend=etcd2 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --kubelet-port=10250 --advertise-address=192.168.1.97 --allow-privileged=false --service-cluster-ip-range=10.10.10.0/24
查看進程
命令:journalctl -u kube-apiserver

-- Logs begin at 三 2018-11-07 10:10:28 CST, end at 一 2018-11-12 15:44:12 CST. --
11月 12 15:39:57 management systemd[1]: Started Kubernetes API Server.
11月 12 15:39:57 management systemd[1]: Starting Kubernetes API Server...
11月 12 15:39:57 management kube-apiserver[15964]: Flag --kubelet-port has been deprecated, kubelet-port is deprecated and will be removed.
11月 12 15:39:57 management kube-apiserver[15964]: I1112 15:39:57.747966 15964 flags.go:52] FLAG: --address="0.0.0.0"
11月 12 15:39:57 management kube-apiserver[15964]: I1112 15:39:57.748035 15964 flags.go:52] FLAG: --admission-control="[AlwaysAdmit]"
11月 12 15:39:57 management kube-apiserver[15964]: I1112 15:39:57.748050 15964
查看啟動日志

2.6、運行scheduler.sh調度腳本 加masterIP地址默認端口8080

./scheduler.sh 192.168.1.79
命令:journalctl -u kube-scheduler

-- Logs begin at 三 2018-11-07 10:10:28 CST, end at 一 2018-11-12 15:50:36 CST. --
11月 12 15:49:51 management systemd[1]: Starting Kubernetes Scheduler...
11月 12 15:49:52 management kube-scheduler[16963]: I1112 15:49:52.010384 16963 flags.go:52] FLAG: --address="0.0.0.0"
11月 12 15:49:52 management kube-scheduler[16963]: I1112 15:49:52.010558 16963 flags.go:52] FLAG: --algorithm-provider="DefaultProvider"
11月 12 15:49:52 management kube-scheduler[16963]: I1112 15:49:52.010579 16963 flags.go:52] FLAG: --alsologtostderr="false"
11月 12 15:49:52 management kube-scheduler[16963]: I1112 15:49:52.010588 16963 flags.go:52] FLAG: --contention-profiling="false"
11月 12 15:49:52 management kube-scheduler[16963]: I1112 15:49:52.010651 16963 flags.go:52] FLAG: --kubeconfig=""
查看日志

2.7、運行controller-manager.sh管理端控制腳本 加masterIP地址默認端口8080

./controller-manager.sh 192.168.1.79
命令:journalctl -u kube-controller-manager

-- Logs begin at 三 2018-11-07 10:10:28 CST, end at 一 2018-11-12 15:55:57 CST. --
11月 12 15:52:54 management systemd[1]: Started Kubernetes Controller Manager.
11月 12 15:52:54 management systemd[1]: Starting Kubernetes Controller Manager...
11月 12 15:52:54 management kube-controller-manager[17311]: I1112 15:52:54.296770   17311 flags.go:52] FLAG: --address="0.0.0.0"
11月 12 15:52:54 management kube-controller-manager[17311]: I1112 15:52:54.296977   17311 flags.go:52] FLAG: --allocate-node-cidrs="false"
11月 12 15:52:54 management kube-controller-manager[17311]: I1112 15:52:54.297001   17311 flags.go:52] FLAG: --allow-untagged-cloud="false"
11月 12 15:52:54 management kube-controller-manager[17311]: I1112 15:52:54.297007   17311 flags.go:52] FLAG: --allow-verification-with-non-compliant-keys="false"
11月 12 15:52:54 management kube-controller-manager[17311]: I1112 15:52:54.297015   17311 flags.go:52] FLAG: --alsologtostderr="false"
查看啟動日志

2.8、將kubernetes添加到環境變量,並設置立即生效

echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
source /etc/profile

 


3、工作節點1與2:kubernetes Node 運行節點組織

3.1、解壓node包並加入執行文件

unzip node.zip;chmod +x *

3.2、創建目錄

mkdir -p /opt/kubernetes/{bin,cfg}

3.3、將壓縮文件kube移動到bin目錄下

mv kubelet kube-proxy /opt/kubernetes/bin

3.4、修改腳本配置文件

vim kubelet.sh

# MASTER服務端地址
MASTER_ADDRESS=${1:-"192.168.1.79"}
# 本地工作節點地址
NODE_ADDRESS=${2:-"192.168.1.79"}
# DNS地址
DNS_SERVER_IP=${3:-"192.168.1.1"}
DNS_DOMAIN=${4:-"cluster.local"}
# 配置文件地址 主要用於連接API服務
KUBECONFIG_DIR=${KUBECONFIG_DIR:-/opt/kubernetes/cfg}

3.5、禁用所有的swap分區,不然啟動會報錯

swapoff -a

3.6、啟動kubelet.sh管理本機運行容器生命周期服務腳本

# ./kubelet.sh master地址 本機地址 DNS地址
./kubelet.sh 192.168.1.79 192.168.1.78 10.10.10.2
命令:ps -aux | grep kubelet

root      57592  2.9  0.8 622884 72492 ?        Ssl  16:30   0:01 /opt/kubernetes/bin/kubelet --logtostderr=true --v=4 --address=192.168.1.78  --hostname-override=192.168.1.78 --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig --allow-privileged=false --cluster-dns=10.10.10.2 --cluster-domain=cluster.local
root      57708  0.0  0.0 112732  2304 pts/0    S+   16:31   0:00 grep --color=auto kubelet
查看進程
命令:journalctl -u kubelet

-- Logs begin at 三 2018-11-07 09:36:45 CST, end at 一 2018-11-12 16:32:28 CST. --
11月 12 16:20:08 slave02 systemd[1]: Started Kubernetes Kubelet.
11月 12 16:20:08 slave02 systemd[1]: Starting Kubernetes Kubelet...
11月 12 16:20:08 slave02 kubelet[57178]: I1112 16:20:08.295744   57178 flags.go:52] FLAG: --address="192.168.1.78"
11月 12 16:20:08 slave02 kubelet[57178]: I1112 16:20:08.295853   57178 flags.go:52] FLAG: --allow-privileged="false"
11月 12 16:20:08 slave02 kubelet[57178]: I1112 16:20:08.295887   57178 flags.go:52] FLAG: --alsologtostderr="false"
11月 12 16:20:08 slave02 kubelet[57178]: I1112 16:20:08.295899   57178 flags.go:52] FLAG: --anonymous-auth="true"
查看日志
命令:netstat -antp | grep 10250

tcp        0      0 192.168.1.78:10250      0.0.0.0:*               LISTEN      57592/kubelet  
查看監聽端口

3.7、啟動網絡代理proxy.sh腳本

# ./proxy.sh Master地址 本地地址
./proxy.sh 192.168.1.79 192.168.1.78
命令:journalctl -u kube-proxy

-- Logs begin at 三 2018-11-07 09:36:45 CST, end at 一 2018-11-12 16:36:30 CST. --
11月 12 16:34:39 slave02 systemd[1]: Started Kubernetes Proxy.
11月 12 16:34:39 slave02 systemd[1]: Starting Kubernetes Proxy...
11月 12 16:34:39 slave02 kube-proxy[57883]: W1112 16:34:39.787713   57883 server.go:191] WARNING: all flags other than --config, --write-config-to, and --cleanup are deprecated. Please begi
11月 12 16:34:39 slave02 kube-proxy[57883]: W1112 16:34:39.801807   57883 server_others.go:263] Flag proxy-mode="" unknown, assuming iptables proxy
11月 12 16:34:39 slave02 kube-proxy[57883]: I1112 16:34:39.804394   57883 server_others.go:117] Using iptables Proxier.
11月 12 16:34:39 slave02 kube-proxy[57883]: W1112 16:34:39.805553   57883 server.go:580] Failed to retrieve node info: Get 
查看日志

 


4、管理節點:測試查看集群節點是否加入

查看節點加入信息

kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.1.77 Ready <none> 5m v1.8.0
192.168.1.78 Ready <none> 5m v1.8.0

查看組件運行狀態

kubectl get componentstatus
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health": "true"}

查看服務版本

kubectl version
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"6e937839ac04a38cac63e6a7a306c5d035fe7b0a", GitTreeState:"clean", BuildDate:"2017-09-28T22:57:57Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.0", GitCommit:"6e937839ac04a38cac63e6a7a306c5d035fe7b0a", GitTreeState:"clean", BuildDate:"2017-09-28T22:46:41Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
版本信息
該配置文件通過下邊官方配置文件后進行的修改:
kubernetes二進制包:
/kubernetes/cluster/centos/master/scripts/apiserver.sh
注:啟動腳本將二進制命令交給系統
注:systemd管理服務啟動后由systemd管理,都設置了開機啟動。
注:標簽默認指定名稱生成。
擴展1:
一、kubelet再創建pod時會先下載一個pause鏡像,這個鏡像用於容器基礎網絡管理,但這個鏡像倉庫。(gcr.io/google_containers/pause-amd64:3.0)是國外的,不能順利下載。

解決辦法:
# 國內下載pause鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
# tag是kubernetes默認的倉庫和版本好地址。
docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

或者

# 指定鏡像倉庫位置
--pod-infra-container-image=registry.cn-hangzhou.zliyuncs.com/google-containers/pause-amd64.3.0
再或者翻牆

二、Docker默認鏡像倉庫是Docker Hub,可能會下載速度慢或者超時。

改善方法:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://04be47cf.m.daocloud.io

# 1、下載國內的pause鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0

# 2、設置tag默認的倉庫和版本好地址。
docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

# 工作節點:查看docker鏡像
docker images
registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64   3.0                 99e59f495ffa        2 years ago         747kB

3、工作節點:部署國內鏡像
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://04be47cf.m.daocloud.io

4、重啟鏡像
systemctl restart docker 

5、查看切換地址
cat /etc/docker/daemon.json 
{"registry-mirrors": ["http://04be47cf.m.daocloud.io"]}
部署注意事項

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM