此處僅有兩臺服務器,一臺master節點,一臺node節點,後期可按照步驟繼續增加node節點
1. 搭建環境
- Master節點:
CPU : 2核、內存 :2GiB、 操作系統:Centos7.6 64位、 帶寬:1Mbps
服務器公網IP:** 、 私有IP:** - Node節點:
CPU : 2核、內存 :4GiB、 操作系統:Centos7.6 64位、 帶寬:1Mbps
服務器公網IP:** 、 私有IP:** - 集羣版本:
k8s=v1.15.0 、docker=docker-ce-18.06.1.ce-3.el7 、etcd=3.3.10、 dashboard=v1.10.1、flannel=v0.11.0-amd64、coreDns= 1.3.1、pause=3.1
2. 安裝步驟
2.1 需要在每一個節點上進行的操作
2.1.1 提前準備
在K8s中爲了高效運行,整個集羣的機器需要關閉防火牆、SWAP分區以及Selinux,使用如下命令:
#關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
# 暫時關閉SWAP分區
swapoff -a
# 永久禁用SWAP分區
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 禁用Selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
將系統中橋接的IPv4以及IPv6的流量串通:
cat >/etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
2.1.2 安裝Docker
這裏我們使用阿里雲的鏡像。首先下載阿里雲鏡像倉庫描述文件:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
如果沒有wget命令請使用:yum -y install wget進行安裝
然後指定Docker版本進行安裝:
yum -y install docker-ce-18.06.1.ce-3.el7
開啓Docker的服務以及安裝:
systemctl enable docker && systemctl start docker
docker --version
此時應該能得到如下的情況的驗證:
在K8S中建議Docker與K8S使用的Cgroupdriver值爲 “systemd”,所以每一個節點還需要進行如下的修改 :
## Create /etc/docker directory.
mkdir /etc/docker
# Setup daemon.
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# Restart Docker
systemctl daemon-reload
systemctl restart docker
2.1.3 安裝Kubernetes的安裝組件
在安裝k8s之前也需要加上yum源:
vi /etc/yum.repos.d/kubernetes.repo
# 在這個文件中輸入
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enable=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
指定版本進行kubeadm、kubelet、kubectl的安裝:
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
此時應該會得到如下描述的界面:
然後開啓kubelet服務:
systemctl enable kubelet.service
2.2 需要在Master上操作
注意需要自己填寫的地方,可以根據自己的情況進行修改,然後基於我的運行情況就是,執行如下命令:
kubeadm init \
--apiserver-advertise-address= 此處爲master節點的公網ip\
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.15.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
–apiserver-advertise-address string API 服務器所公佈的其正在監聽的 IP 地址。如果未設置,則使用默認網絡接口。 默認設置位master節點ip地址 –pod-network-cidr string
通過這個值來設定pod網絡的IP地址網段;設置了這個值以後,控制平面會自動給每個節點設置CIDRs(無類別域間路由,Classless
Inter-Domain Routing)。默認爲10.1.0.0/16 –service-cidr string Default:
“10.96.0.0/12” 設置service的CIDRs,默認爲 10.96.0.0/12。
因爲阿里雲ecs裏沒有配置公網ip,etcd無法啓動,所以kubeadm在初始化會出現”timeout“的錯誤。
解決辦法:
-
建立兩個ssh對話,即用ssh工具新建兩個標籤,一個用來初始化節點,另一個在初始化過程中修改配置文件。 注意是初始化過程中,每次運行kubeadm init,kubeadm都會生成etcd的配置文件,如果提前修改了配置文件,在運行kubeadm init時會把修改的結果覆蓋,那麼也就沒有作用了。
-
運行”kubeadm init …“上述的初始化命令,此時會卡在
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[kubelet-check] Initial timeout of 40s passed
- 在輸入上述命令後,kubeadm即開始了master節點的初始化,但是由於etcd配置文件不正確,所以etcd無法啓動,要對該文件進行修改。
文件路徑"/etc/kubernetes/manifests/etcd.yaml"。
修改前:
修改後:
此處"xxx"爲公網ip,要關注的是"–listen-client-urls"和"–listen-peer-urls"。需要把"–listen-client-urls"後面的公網ip刪除,把"–listen-peer-urls"改爲本地的地址。
- 稍等後master節點初始化就會完成
注意、注意
在這個部分安裝完成後,會得到一個如下的token,這個在後面node加入master要用的。
轉到node節點窗口,通過”kubeadm join…"命令將node節點加入到master集羣中。
master節點完成初始化後以及node節點加入後,通過閱讀終端信息,我們還需執行幾個命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
使用下述命令可查看集羣中節點情況
kubectl get node
但是會查看到master節點和node節點都是NotReady狀態。 因爲在K8S中,整個系統處於一個扁平的網絡之下,其中在谷歌內部的網絡架構中,這個是天然存在的,但是在我們自己的環境裏這個需要設置。
所以下一步就是部署網絡環境,此處我們使用的就是由Centos開發的flannel網絡組件。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
其中需要在master節點和node節點都安裝flannel插件。
使用“kubectl get node”可查看所有節點都處於ready狀態了
使用“kubectl get pods --all-namespaces”可查看所有Pod都在running狀態
此處爲止,k8s集羣基本安裝已完成
2.3 安裝dashboard(k8s集羣的web ui)
因dashboard的安裝爲非硬性要求,所以整個安裝步驟可參考下述地址
https://www.cnblogs.com/wucaiyun1/p/11692204.html
目前已在master節點(47服務器)安裝好了dashboard,因爲證書原因只能在火狐瀏覽器上進行查看,通過訪問https://master節點IP:30001/
此處以令牌登錄爲例,後期若有需求可使用kubeconfig進行登錄
在master節點中輸入命令獲取token登錄:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard | awk '{print $1}')
將token輸入登錄
本文中有部分內容來源於其他文章,因記錄該筆記的時間較爲久遠,忘了用到哪些文章,如有侵權,請聯繫本人刪除該內容或加入文章引用鏈接