Centos7 Kubernetes1.8+docker容器集群
Kubernetes(k8s)
Kubernetes官網
Kubernetes使用教程
Docker-ce安裝官方教程
Kubernetes簡介
Kubernetes是google開源的多主機容器管理工具, 簡稱:k8s,它帶有人性化圖形管理界面, 它在開源社區很受歡迎github上已經有了20000+的收藏,和7000+的fork。
Kubernetes其特性主要包括:
1、可以非常輕松地開發復雜系統;
2、Kubernetes為微服務架構;
3、系統可以隨時隨地整體“搬遷”到公有云上;
4、Kubernetes系統架構具備了超強的橫向擴容能力。
Kubernetes使用的資源對象
在Kubernetes中,Node、Pod、Replication Controller、Service等概念都可以看作一種資源對象,通過Kubernetes提供的Kubectl工具或者API調用進行操作,并保存在etcd中。
實驗環境
系統版本:centos7x3.10.0-514.el7.x86_64
Kubernetes版本:v1.8.3
Kubernetes-node版本:v1.8.3
Docker版本:docker-ce.x86_64 0:18.03.1.ce-1.el7.centos
注:以上最好兩個均采用當前最新穩定版本。
關閉防火墻并禁止開機自啟
systemctl stop firewalld.service
systemctl disable firewalld
關閉selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
重啟 reboot
搭建k8s集群
master主機(IP:192.168.152.170)
安裝組件:etcd kube-apiserver kube-controller-manager kube-scheduler
1、安裝kubernetes服務端
1)下載二進制源碼包
wget https://storage.googleapis.com/kubernetes-release/release/v1.8.3/kubernetes-server-linux-amd64.tar.gz
注:直接在master服務器上執行命令下載即可!
2)解壓源碼包
tar zxf kubernetes-server-linux-amd64.tar.gz
3)遞歸創建kubernetes運行文件存放目錄
mkdir -p /k8s/{bin,cfg}
4)將解壓目錄里的文件移動到新創建的目錄里
mv kubernetes/server/bin/{kube-apiserver,kube-controller-manager,kube-scheduler,kubectl} /k8s/bin/
2、安裝etcd組件(默認版本:etcd.x86_64 0:3.2.22-1.el7)
1)安裝etcd
yum -y install etcd
2)編輯etcd的配置文件
vi /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
注:Ubuntu系統etcd配置文件在/etc/default/etcd。
3)啟動etcd服務
#設置etcd服務開機自啟
systemctl enable etcd
#啟動etcd服務
systemctl start etcd
3、配置kube-apiserver組件
1)創建kube-apiserver配置文件
vi /k8s/cfg/kube-apiserver
#啟用日志標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志級別
KUBE_LOG_LEVEL="--v=4"
#Etcd服務地址
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.152.170:2379"
#API服務監聽地址
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
#API服務監聽端口
KUBE_API_PORT="--insecure-port=8080"
#對集群中成員提供API服務地址
KUBE_ADVERTISE_ADDR="--advertise-address=192.168.152.170"
#允許容器請求特權模式,默認false
KUBE_ALLOW_PRIV="--allow-privileged=false"
#集群分配的IP范圍
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.0.100.0/24"
2)創建kube-apiserver的systemd服務啟動文件
vi /lib/systemd/system/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/k8s/cfg/kube-apiserver
#ExecStart=/k8s/bin/kube-apiserver ${KUBE_APISERVER_OPTS}
ExecStart=/k8s/bin/kube-apiserver \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_ETCD_SERVERS} \
${KUBE_API_ADDRESS} \
${KUBE_API_PORT} \
${KUBE_ADVERTISE_ADDR} \
${KUBE_ALLOW_PRIV} \
${KUBE_SERVICE_ADDRESSES}
Restart=on-failure
[Install]
WantedBy=multi-user.target
3)啟動kube-apiserver服務
#重新加載kube-apiserver服務守護進程
systemctl daemon-reload
#設置kube-apiserver服務開機自啟
systemctl enable kube-apiserver
#重啟kube-apiserver服務
systemctl restart kube-apiserver
注:apiserver默認支持etcd3,如果是etcd2,需啟動時指定版本選項--storage-backend=etcd2
4、配置kube-scheduler組件
1)創建kube-scheduler配置文件
vi /k8s/cfg/kube-scheduler
#啟用日志標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志級別
KUBE_LOG_LEVEL="--v=4"
#k8s-master服務地址
KUBE_MASTER="--master=192.168.152.170:8080"
#指定master為控制臺
KUBE_LEADER_ELECT="--leader-elect"
2)創建kube-scheduler的systemd服務啟動文件
vi /lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/k8s/cfg/kube-scheduler
ExecStart=/k8s/bin/kube-scheduler \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure
[Install]
WantedBy=multi-user.target
3)啟動kube-scheduler服務
#重新加載kube-scheduler服務守護進程
systemctl daemon-reload
#設置kube-scheduler服務開機自啟
systemctl enable kube-scheduler
#重新啟動kube-scheduler服務
systemctl restart kube-scheduler
5、配置kube-controller-manager組件
1)創建kube-controller-manager配置文件
vi /k8s/cfg/kube-controller-manager
#啟用日志標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志級別
KUBE_LOG_LEVEL="--v=4"
#k8s-master服務地址
KUBE_MASTER="--master=192.168.152.170:8080"
2)創建kube-controller-manager的systemd服務啟動文件
vi /lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/k8s/cfg/kube-controller-manager
ExecStart=/k8s/bin/kube-controller-manager \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure
[Install]
WantedBy=multi-user.target
3)啟動kube-controller-manager服務
#重新加載kube-controller-manager服務守護進程
systemctl daemon-reload
#設置kube-controller-manager服務開機自啟
systemctl enable kube-controller-manager
#重新啟動kube-controller-manager服務
systemctl restart kube-controller-manager
注:master節點組件全部啟動了,需要注意的是服務啟動順序有依賴,先啟動etcd,再啟動apiserver,其他組件無順序要求。
查看master節點組件進程狀態 ps -ef | grep kube
注:以上截圖說明所有組件都正常運行!如果單獨一個組件啟動失敗可以使用k8s自帶查看日志命令。
6、K8s查看具體組件日志的命令
journalctl –u etcd
journalctl -u kube-apiserver
journalctl -u kube-controller-manager
journalctl -u kube-scheduler
node-1主機(192.168.152.168)
安裝組件:kubelet kube-proxy docker
1、安裝kubernetes的node-1節點
1)下載二進制源碼包
wget https://storage.googleapis.com/kubernetes-release/release/v1.8.3/kubernetes-node-linux-amd64.tar.gz
注:直接在node-1服務器上執行命令下載即可!
2)解壓源碼包
tar zxf kubernetes-node-linux-amd64.tar.gz
3)遞歸創建kubernetes運行文件存放目錄
mkdir -p /k8s/{bin,cfg}
4)將解壓目錄里的文件移動到新創建的目錄里
mv kubernetes/node/bin/{ kubectl,kubelet,kube-proxy} /k8s/bin/
5)創建連接master apiserver配置文件
vi /k8s/cfg/kubelet.kubeconfig
apiVersion: v1
kind: Config
clusters:
- cluster:
server: http://192.168.152.170:8080
name: local
contexts: - context:
cluster: local
name: local
current-context: local
注:kubeconfig文件用于kubelet連接master apiserver的。
6)創建kubelet配置文件
vi /k8s/cfg/kubelet
#啟用日志標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志級別
KUBE_LOG_LEVEL="--v=4"
#Kubelet服務IP地址
NODE_ADDRESS="--address=192.168.152.168"
#Kubelet服務端口
NODE_PORT="--port=10250"
#自定義節點名稱
NODE_HOSTNAME="--hostname-override=192.168.152.168"
#kubeconfig路徑,指定連接API服務器
KUBELET_KUBECONFIG="--kubeconfig=/k8s/cfg/kubelet.kubeconfig"
#允許容器請求特權模式,默認false
KUBE_ALLOW_PRIV="--allow-privileged=false"
#DNS信息
KUBELET_DNS_IP="--cluster-dns=10.0.100.2"
KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local"
#禁用使用Swap
KUBELET_SWAP="--fail-swap-on=false"
7)創建kubelet服務的systemd啟動文件
vi /lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service
[Service]
EnvironmentFile=-/k8s/cfg/kubelet
ExecStart=/k8s/bin/kubelet \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_ADDRESS} \
${NODE_PORT} \
${NODE_HOSTNAME} \
${KUBELET_KUBECONFIG} \
${KUBE_ALLOW_PRIV} \
${KUBELET_DNS_IP} \
${KUBELET_DNS_DOMAIN} \
${KUBELET_SWAP}
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target
8)啟動kubelet服務
#重新加載kubelet服務守護進程
systemctl daemon-reload
#設置kubelet服務開機自啟
systemctl enable kubelet
#重新啟動kubelet服務
systemctl restart kubelet
2、配置kube-proxy組件
1)創建kube-proxy配置文件
vi /k8s/cfg/kube-proxy
#用日志標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
#志級別
KUBE_LOG_LEVEL="--v=4"
#定義節點名稱
NODE_HOSTNAME="--hostname-override=192.168.152.168"
#PI服務地址
KUBE_MASTER="--master=http://192.168.152.170:8080"
2)創建kube-proxy服務的systemd服務啟動文件
vi /lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Proxy
After=network.target
[Service]
EnvironmentFile=/k8s/cfg/kube-proxy
ExecStart=/k8s/bin/kube-proxy \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_HOSTNAME} \
${KUBE_MASTER}
Restart=on-failure
[Install]
WantedBy=multi-user.target
3)啟動kube-proxy服務
#重新加載kube-proxy服務守護進程
systemctl daemon-reload
#設置kube-proxy服務開機自啟
systemctl enable kube-proxy
#重啟kube-apiserver服務
systemctl restart kube-proxy
3、安裝docker(docker-ce.x86_64 0:18.03.1.ce-1.el7.centos)
1)安裝docker-ce的yum源
//下載yum源到本地
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
//移動yum源到/etc/yum.repos.d/目錄下
mv docker-ce.repo /etc/yum.repos.d/
2)從高到低排列顯示docker版本
yum list docker-ce --showduplicates | sort -r
注:在正式環境,必須使用統一的穩定版本,而不是總使用最新(這樣各host上的版本可能不一致)
3)安裝docker-ce .x86_64-18.03.1.ce-1.el7.centos
yum -y install docker-ce .x86_64-18.03.1.ce-1.el7.centos
4)啟動docker服務
//設置docker開機自啟
systemctl enable docker
//啟動docker服務
systemctl start docker
//重啟docker服務
systemctl restart docker
node-2主機(192.168.152.169)
安裝組件:kubelet kube-proxy docker
1、安裝kubernetes的node-2節點
1)下載二進制源碼包
wget https://storage.googleapis.com/kubernetes-release/release/v1.8.3/kubernetes-node-linux-amd64.tar.gz
注:直接在node-2服務器上執行命令下載即可!
2)解壓源碼包
tar zxf kubernetes-node-linux-amd64.tar.gz
3)遞歸創建kubernetes運行文件存放目錄
mkdir -p /k8s/{bin,cfg}
4)將解壓目錄里的文件移動到新創建的目錄里
mv kubernetes/server/bin/{ kubectl,kubelet,kube-proxy} /k8s/bin/
5)創建連接master apiserver配置文件
vi /k8s/cfg/kubelet.kubeconfig
apiVersion: v1
kind: Config
clusters:
- cluster:
server: http://192.168.152.170:8080
name: local
contexts: - context:
cluster: local
name: local
current-context: local
注:kubeconfig文件用于kubelet連接master apiserver的。
6)創建kubelet配置文件
vi /k8s/cfg/kubelet
#啟用日志標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志級別
KUBE_LOG_LEVEL="--v=4"
#Kubelet服務IP地址
NODE_ADDRESS="--address=192.168.152.169"
#Kubelet服務端口
NODE_PORT="--port=10250"
#自定義節點名稱
NODE_HOSTNAME="--hostname-override=192.168.152.169"
#kubeconfig路徑,指定連接API服務器
KUBELET_KUBECONFIG="--kubeconfig=/k8s/cfg/kubelet.kubeconfig"
#允許容器請求特權模式,默認false
KUBE_ALLOW_PRIV="--allow-privileged=false"
#DNS信息
KUBELET_DNS_IP="--cluster-dns=10.0.100.2"
KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local"
#禁用使用Swap
KUBELET_SWAP="--fail-swap-on=false"
7)創建kubelet服務的systemd啟動文件
vi /lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service
[Service]
EnvironmentFile=-/k8s/cfg/kubelet
ExecStart=/k8s/bin/kubelet \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_ADDRESS} \
${NODE_PORT} \
${NODE_HOSTNAME} \
${KUBELET_KUBECONFIG} \
${KUBE_ALLOW_PRIV} \
${KUBELET_DNS_IP} \
${KUBELET_DNS_DOMAIN} \
${KUBELET_SWAP}
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target
8)啟動kubelet服務
#重新加載kubelet服務守護進程
systemctl daemon-reload
#設置kubelet服務開機自啟
systemctl enable kubelet
#重新啟動kubelet服務
systemctl restart kubelet
2、配置kube-proxy組件
1)創建kube-proxy配置文件
vi /k8s/cfg/kube-proxy
#啟用日志標準錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志級別
KUBE_LOG_LEVEL="--v=4"
#自定義節點名稱
NODE_HOSTNAME="--hostname-override=192.168.152.169"
#API服務地址
KUBE_MASTER="--master=http://192.168.152.170:8080"
2)創建kube-proxy服務的systemd服務啟動文件
vi /lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Proxy
After=network.target
[Service]
EnvironmentFile=/k8s/cfg/kube-proxy
ExecStart=/k8s/bin/kube-proxy \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_HOSTNAME} \
${KUBE_MASTER}
Restart=on-failure
[Install]
WantedBy=multi-user.target
3)啟動kube-proxy服務
#重新加載kube-proxy服務守護進程
systemctl daemon-reload
#設置kube-proxy服務開機自啟
systemctl enable kube-proxy
#重啟kube-apiserver服務
systemctl restart kube-proxy
3、安裝docker(docker-ce.x86_64 0:18.03.1.ce-1.el7.centos)
1)安裝docker-ce的yum源
//下載yum源到本地
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
//移動yum源到/etc/yum.repos.d/目錄下
mv docker-ce.repo /etc/yum.repos.d/
2)從高到低排列顯示docker版本
yum list docker-ce --showduplicates | sort -r
注:在正式環境,必須使用統一的穩定版本,而不是總使用最新(這樣各host上的版本可能不一致)
3)安裝docker-ce .x86_64-18.03.1.ce-1.el7.centos
yum -y install docker-ce .x86_64-18.03.1.ce-1.el7.centos
4)啟動docker服務
//設置docker開機自啟
systemctl enable docker
//啟動docker服務
systemctl start docker
//重啟docker服務
systemctl restart docker
驗證群集部署是否成功
1、設置k8s命令的環境變量
echo "export PATH=$PATH:/k8s/bin" >> /etc/profile
注:有幾臺機器就執行幾遍,當前有三臺機器上都執行!
2、讓環境變量立即生效
source /etc/profile
3、在master節點上用命令查看群節點狀態
kubectl get nodes
注:能看到當前你所添加的所有節點,表示群集部署完成!
參考文章:Kubernetes(K8S)集群管理Docker容器(部署篇)
轉載于:https://blog.51cto.com/13043516/2285350
總結
以上是生活随笔為你收集整理的Centos7 Kubernetes1.8+docker容器集群的全部內容,希望文章能夠幫你解決所遇到的問題。