目錄
一.三種集羣
minikube
- Minikube是一個工具,可以在本地快速運行一個單點的kubernets,嘗試Kubernetes或日常開發的用戶使用。不能用於環境。
- 官網地址:Minikube下載地址
kubeadm
- kubeadm是一個命令行工具,可以在物理機,雲服務器或者虛擬機上輕鬆部署安全可靠的Kuernetes集羣
- kubeadm提供kubeadm init和kubeadm join,用於快速部署kubernetes集羣。kubeadm init啓動一個kubernetes的主節點,kubeadm join啓動一個Kubernetes工作節點並且將其加入集羣
- 官網地址:kubeadm工具下載地址
二進制包
- 從官方下載發版本的二進制包,手動部署每個組件,組成kubernetes集羣。
- 二進制包下載地址:https://github.com/kubernetes/kubernetes/releases?after=v1.13.1
總結:生成環境中部署Kubernets集羣,只有Kueadm和二進制包可選,Kubeadm降低部署門檻,但是屏蔽了很多細節,遇到問題很難排查。學習過程中,建議使用二進制包部署Kuernetes集羣,便於學習工作原理和後期維護。
二.部署minikube集羣
實驗環境
角色 | IP地址 | 系統 | 軟件包 |
master | 192.168.43.101/24 | centos7 | etcd kubernetes flannel |
node1 | 192.168.43.102/24 | centos7 | etcd kubernetes flannel |
node2 | 192.168.43.103/34 | centos7 | etcd kubernetes flannel |
master的部署
- 設置基本環境
[root@localhost ~]# hostnamectl set-hostname master
[root@localhost ~]# su
[root@master ~]# systemctl stop firewalld
[root@master ~]# setenforce 0
- 安裝相關軟件包
[root@master ~]# yum install -y etcd kubernetes flannel
#etcd作爲分佈式存儲軟件
#flannel作爲網絡
#kubernetes作爲docker管理集羣
#docker會作爲依賴包被下載
- 配置etcd分佈式鍵值存儲系統
[root@master ~]# cd /etc/etcd/
[root@master etcd]# ls
etcd.conf
[root@master etcd]# vi etcd.conf
##在文件末尾追加如下內容:
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ##數據目錄
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:4001" ##客戶端訪問監聽地址
ETCD_NAME="default" ##節點名稱
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:4001" ##客戶端通告地址
//以下爲文件擴展解析,不需要加入
ETCD_LISTEN_PEER_URLS: 集羣通信監聽地址
ETCD_INITIAL_ADVERTISE_PEER_URLS: 集羣通告地址
ETCD_INITIAL_CLUSTER: 集羣節點地址
ETCD_INITIAL_CLUSTER_TOKEN: 集羣Token(令牌)
ETCD_INITIAL_CLUSTER_STATE: 加入集羣當前狀態,new是新集羣,existing表示加入已有集羣
- 配置apiserver
//apiserver爲集羣的統一入口,各個組件的協調者,以RESTful API提供接口服務,所有對象資源的增刪改查和監聽操作都交給apiserver處理後再提交給etcd存儲
[root@master kubernetes]# ls
apiserver config controller-manager kubelet proxy scheduler
[root@master kubernetes]# vi apiserver
##做如下修改
# The address on the local server to listen to.
KUBE_API_ADDRESS="--address=0.0.0.0" ##表示master的監聽地址
# The port on the local server to listen on.
KUBE_API_PORT="--port=8080" ##表示master監聽的端口
# Port minions listen on
KUBELET_PORT="--kubelet-port=10250" ##指定node的代理端口
# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:4001" #指定etcd集羣的地址與端口
- 配置flannel網絡
[root@master ~]# cd /etc/sysconfig
[root@master sysconfig]# vi flanneld
# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
//指定etcd存儲的網絡信息,保證成功連接etcd
FLANNEL_ETCD_ENDPOINTS="http://192.168.43.101:4001"
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/atomic.io/network"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
注:
Overlay network:覆蓋網絡,在現有的網絡環境中在疊加一層虛擬網絡技術模式,將網絡中的主機通過虛擬鏈路連接起來。
Vxlan:將原數據包封裝到UDP中,並且使用基礎網絡的IP/MAC作爲外層報文頭進行封裝,然後在以太網上傳,到達目的地之後又隧道端點解封並將數據發送目標地址
Flannel:是Overlay網絡的一種,也是將源數據包封裝在另一層網絡包裏進行路由轉發和通信,目前已經支持,UDP、VXLAN、HOSTGW、AWS、VPC和GCE路由等數據轉發方式
- 設置etcd網絡
[root@master ~]# etcdctl -C //192.168.43.101:4001 set /atomic.io/network/config '{"Network":"10.1.1.0/16"}'
{"Network":"10.1.1.0/16"}
- 啓動所有組件服務
systemctl start etcd
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
node1與node2的部署(以下配置以node2爲例)
- 環境設置
hostnamectl set-hostname node1/node2
su
systemctl stop firewalld
setenforce 0
- 安裝必要軟件包
yum install -y etcd kubernetes flannel
- 編輯主配置文件
grep -v "^#" /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true" //啓用日誌
KUBE_LOG_LEVEL="--v=0" //設置日誌等級
KUBE_ALLOW_PRIV="--allow-privileged=false" //是否啓用授權
KUBE_MASTER="--master=http://192.168.43.101:8080" //指定master的地址與端口
KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.43.101:4001" //指定etcd的地址與端口
- 編輯代理配置文件
grep -v "^#" /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0" //指定代理的地址
KUBELET_PORT="--port=10250" //指定代理的端口
KUBELET_HOSTNAME="--hostname-override=192.168.43.103" //設置在集羣中顯示的主機名
KUBELET_API_SERVER="--api-servers=http://192.168.43.101:8080" //指定apiserver的地址與端口
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" //管理pod網絡的中的鏡像
KUBELET_ARGS=""
[root@node2 ~]#
- 編輯網絡配置
[root@node2 ~]# cat /etc/sysconfig/flanneld
# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://192.168.43.101:4001" //指定etcd的地址與端口
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/atomic.io/network"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
[root@node2 ~]#
- 啓動服務
[root@node2 ~]# systemctl start flanneld.service
[root@node2 ~]# systemctl start kube-proxy.service
[root@node2 ~]# systemctl start kubelet.service
[root@node2 ~]# systemctl start docker
在master中,測試minikube集羣
- 查看所有節點
[root@master ~]# kubectl get nodes
NAME STATUS AGE
192.168.43.102 Ready 5h
192.168.43.103 Ready 55m
[root@master ~]#
- 查看所有節點服務是否健康
[root@master ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
etcd-0 Healthy {"health":"true"}
controller-manager Healthy ok
scheduler Healthy ok
[root@master ~]#
總結:minikube集羣僅用於測試