基於阿里雲ECS服務器搭建k8s集羣

此處僅有兩臺服務器,一臺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“的錯誤。

解決辦法:

  1. 建立兩個ssh對話,即用ssh工具新建兩個標籤,一個用來初始化節點,另一個在初始化過程中修改配置文件。 注意是初始化過程中,每次運行kubeadm init,kubeadm都會生成etcd的配置文件,如果提前修改了配置文件,在運行kubeadm init時會把修改的結果覆蓋,那麼也就沒有作用了。
    在這裏插入圖片描述

  2. 運行”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
  1. 在輸入上述命令後,kubeadm即開始了master節點的初始化,但是由於etcd配置文件不正確,所以etcd無法啓動,要對該文件進行修改。
    文件路徑"/etc/kubernetes/manifests/etcd.yaml"。

修改前:

在這裏插入圖片描述

修改後:

在這裏插入圖片描述

此處"xxx"爲公網ip,要關注的是"–listen-client-urls"和"–listen-peer-urls"。需要把"–listen-client-urls"後面的公網ip刪除,把"–listen-peer-urls"改爲本地的地址。

  1. 稍等後master節點初始化就會完成

注意、注意
在這個部分安裝完成後,會得到一個如下的token,這個在後面node加入master要用的。

img

轉到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輸入登錄

在這裏插入圖片描述


本文中有部分內容來源於其他文章,因記錄該筆記的時間較爲久遠,忘了用到哪些文章,如有侵權,請聯繫本人刪除該內容或加入文章引用鏈接







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章