使用kubeadm安裝k8s集群

1 準備工作

服務(wù)器

名稱 IP 用途
master01 192.168.0.40 k8smaster節(jié)點
node01 192.168.0.41 node工作節(jié)點
node02 192.168.0.42 node工作節(jié)點

服務(wù)器建議關(guān)閉swap交換分區(qū)。為了讓容器讀取文件系統(tǒng),需要關(guān)閉SELinux。master和各node之間要相互通訊,由于端口較多,為了簡便起見,這里關(guān)閉了防火墻(生成環(huán)境下,根據(jù)事情情況開啟對應(yīng)的端口即可)。開啟iptables對L2網(wǎng)橋的處理。

kubeadm與二進制安裝的區(qū)別

在使用二進制安裝k8s時,需要在master節(jié)點上安裝:

  • kube-apiserver,以rest風格向外提供服務(wù)(如,管理資源),是集群控制的入口。
  • kube-scheduler,負責資源調(diào)度
  • kube-controller-manager,負責所有資源的自動化控制
  • etcd,集群的主數(shù)據(jù)庫

在node節(jié)點上需要安裝:

  • kubelet,負責pod的管理,向master注冊,匯報自身情況
  • kube-proxy,通訊與負載均衡的組件
  • docker,容器引擎

這是都是屬于服務(wù)器進程,他的安裝配置過程非常復雜。

kubeadm是k8s官方提供的安裝部署工具,簡化了k8s安裝過程。它與二進制安裝不同的地方是,

  • kubeadm是基于容器的,也就是說,在master上的所有組件就是運行在容器中,所以master上也需要安裝docker容器引擎。
  • 因為master上的組件要基于容器運行,所以需要在master上也安裝kubelet,即所有節(jié)點都需要安裝kubelet。

k8s網(wǎng)絡(luò)說明

在k8s中有3種不同的網(wǎng)絡(luò)

  • Node IP,節(jié)點(服務(wù)器)的物理ip,由供應(yīng)商提供(如IPS運營商),這個的192.168.0.40就是node ip。
  • Pod IP,docker分配給每個容器的ip,因為pod可能運行在不同的節(jié)點上,所以需要一種網(wǎng)絡(luò)附件來統(tǒng)一處理pod網(wǎng)絡(luò),這里我們采用flannel。
  • Cluster IP,service ip這個和k8s資源對象service相關(guān),是由k8s分配的

步驟簡要說明

  1. 在master和node上安裝 docker、kubelet、kubeadm,其中,在master上安裝還需要安裝kubectl命令行工具。
  2. 在master上kubeadm init
  3. 在node上kubeadm join

2 配置服務(wù)器環(huán)境

關(guān)閉防火墻(生產(chǎn)環(huán)境不要關(guān)閉防火墻,開啟對應(yīng)的端口即可)

systemctl stop firewalld && systemctl disable firewalld

關(guān)閉swap分區(qū)

swapoff -a

#編輯fstab配置文件,注釋swap分區(qū)一行
vim /etc/fstab 

#/dev/mapper/centos-swap swap swap defaults 0 0

關(guān)閉SELinux

setenforce 0

# 編輯selinux配置文件,設(shè)為disable
vim /etc/selinux/config

SELINUX=disabled

開啟iptables的L2網(wǎng)橋處理

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF

#刷新參數(shù)
sysctl --system

設(shè)置yum源為阿里的鏡像

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache

設(shè)置服務(wù)器名稱(根據(jù)需要設(shè)置),以master01為例,node01和node02同理

hostnamectl set-hostname master01

3 安裝Dokcer

參考Docker官網(wǎng)安裝文檔:

安裝必要的包,yum-utils提供了yum-config-manager功能。docker使用的devicemapper存儲引擎device-mapper-persistent-datalvm2兩個包。

yum install -y yum-utils device-mapper-persistent-data lvm2

設(shè)置docker的repo

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安裝docker

yum install docker-ce docker-ce-cli containerd.io

配置docker的倉庫鏡像,這里設(shè)置的是網(wǎng)頁的鏡像

cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors" : ["http://hub-mirror.c.163.com"]
}
EOF

啟動docker,并設(shè)置為開機自動啟動

systemctl start docker && systemctl enable docker

查看docker是否運行成功

docker version

4 安裝Master節(jié)點

配置kubernetes的yum源,這里設(shè)置為阿里的yum源

cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安裝kubeadm、kubelet和kubectl

yum install kubeadm kubelet kubectl

設(shè)置kubelet開機自起

systemctl enable kubelet

這里我們先將k8s所需組件的鏡像下載到本地,由于鏡像的地址默認在k8s.gcr.io上,國內(nèi)無法下載,所以使用阿里的倉庫鏡像(registry.aliyuncs.com/google_containers)下載

kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers

完成后可以看到docker中的鏡像

docker images

REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE
registry.aliyuncs.com/google_containers/kube-proxy                v1.17.3             ae853e93800d        3 weeks ago         116MB
registry.aliyuncs.com/google_containers/kube-apiserver            v1.17.3             90d27391b780        3 weeks ago         171MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.17.3             b0f1517c1f4b        3 weeks ago         161MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.17.3             d109c0821a2b        3 weeks ago         94.4MB
registry.aliyuncs.com/google_containers/coredns                   1.6.5               70f311871ae1        4 months ago        41.6MB
registry.aliyuncs.com/google_containers/etcd                      3.4.3-0             303ce5db0e90        4 months ago        288MB
registry.aliyuncs.com/google_containers/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB

初始化node節(jié)點,在init參數(shù)中,--image-repository是上面我們pull的倉庫地址,--kubernetes-version為k8s的版本,有了這兩個參數(shù),kubeadm會從本地的鏡像去生成容器。

--service-cidr指定集群的網(wǎng)絡(luò)

--pod-network-cidr指定pod的網(wǎng)絡(luò)

kubeadm init \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.17.3 \
--service-cidr=192.168.20.0/16 \
--pod-network-cidr=10.244.0.0/16 


...

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.40:6443 --token s3bqaf.59ox0voe4c0zf4um \
    --discovery-token-ca-cert-hash sha256:094be673ed29065b86751b2557f4e036c64427a56331e36e00490c02648d6e95 

kubeadm join 192.168.0.40:6443 --token s3bqaf.59ox0voe4c0zf4um \ --discovery-token-ca-cert-hash sha256:094be673ed29065b86751b2557f4e036c64427a56331e36e00490c02648d6e95保存,這個用于node加入master。

配置kubectl環(huán)境

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看kubectl 是否可以使用

kubectl get nodes

NAME       STATUS     ROLES    AGE     VERSION
master01   NotReady   master   2m44s   v1.17.3

配置網(wǎng)絡(luò)

這里我們使用flannel作為k8s的網(wǎng)絡(luò)插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

運行后上面的命令后,使用docker images查看是否下載flannel鏡像,當鏡像下載完成后,執(zhí)行

kubectl get nodes

NAME       STATUS   ROLES    AGE   VERSION
master01   Ready    master   10m   v1.17.3

可以看到STATUS一欄顯示為Ready,表示master節(jié)點安裝成功。

5 安裝Node節(jié)點

在node節(jié)點(192.168.0.41和192.168.0.42)上,配置kubenetes的yum源與上一節(jié)相似,不再累述。這里注意,node節(jié)點上不需要安裝kubectl工具。

yum install kubelet kubeadm

使用上面master安裝后的命令,將該節(jié)點加入到k8s集群中

kubeadm join 192.168.0.40:6443 --token s3bqaf.59ox0voe4c0zf4um \
    --discovery-token-ca-cert-hash sha256:094be673ed29065b86751b2557f4e036c64427a56331e36e00490c02648d6e95 

token是有有效期的,如果token過期,可以在master節(jié)點使用kubeadm token create,重新生成token,替換上面的token選項的內(nèi)容

6 查看各節(jié)點

在master節(jié)點上

kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
master01   Ready    master   35m   v1.17.3
node02     Ready    <none>   13m   v1.17.3

可以看到節(jié)點已準備就緒

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容