使用國內的鏡像源搭建 kubernetes(k8s)集群


1. 概述

老話說的好:努力學習,提高自己,讓自己知道的比別人多,了解的別人多。

 

言歸正傳,之前我們聊了 Docker,隨着業務的不斷擴大,Docker 容器不斷增多,物理機也不斷增多,此時我們會發現,登錄到每台機器去手工操作 Docker 是一件很麻煩的事情。

這時,我們需要一個好用的工具來管理 Docker,幫我們創建、運行、調整、銷毀這些容器,幫我們監控哪個容器宕掉了,然后重新啟動這個容器等等。

kubernetes(k8s)就是一個很好的選擇,今天我們先來聊聊 kubernetes(k8s)是如何搭建的。

 

2. 場景說明

服務器A IP:192.168.1.12

服務器B IP:192.168.1.11

服務器C IP:192.168.1.15

 

服務器A hostname:zhuifengren2 

服務器B hostname:zhuifengren3

服務器C hostname:zhuifengren4 

 

准備三台服務器,CentOS7 操作系統。

三台服務器都已安裝了 Docker,關於 Docker 的安裝可參見我的另一篇文章《Docker 急速入門》(https://www.cnblogs.com/w84422/p/15580575.html

服務器A 作為 Master 節點,服務器B 和 服務器C 作為數據節點。

 

3. kubernetes(k8s)安裝(CentOS7)

3.1 官網地址

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/  

 

3.2 服務器配置要求

內存至少2G

CPU至少2核

硬盤至少20G

 

3.3 關閉 SELinux

方式一:

# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

 

方式二:

# vim /etc/sysconfig/selinux

SELINUX=enforcing 改為 SELINUX=disabled

重啟服務器

 

3.4 設置路由

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf

br_netfilter
EOF

 

# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

 

# sysctl --system

 

3.5 關閉系統的 Swap

# swapoff -a

 

# vi /etc/fstab

注釋掉 SWAP 的自動掛載

 

# vi /etc/sysctl.d/k8s.conf

添加下面一行:
vm.swappiness=0

 

sysctl -p /etc/sysctl.d/k8s.conf

 

3.6 安裝並啟動 kubernetes(K8s)

# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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
exclude=kube*
EOF

 

# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

 

# systemctl enable kubelet

# systemctl restart kubelet

 

3.3 到 3.6 的步驟在3台服務器上都執行

 

4. kubernetes(k8s)集群搭建(CentOS7)

4.1 修改 Docker 配置

# 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"
],
"data-root": "/data/docker"
}
EOF

 

# systemctl daemon-reload
# systemctl restart docker

 

4.2 查看需要的鏡像

# kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.22.3
k8s.gcr.io/kube-controller-manager:v1.22.3
k8s.gcr.io/kube-scheduler:v1.22.3
k8s.gcr.io/kube-proxy:v1.22.3
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4

 

4.3 從國內源拉取鏡像

由於 k8s.cgr.io 無法訪問,因此我們需要先使用國內鏡像源拉下來,再改tag

執行下面腳本:

#/bin/bash
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.22.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.22.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.22.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.22.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4
docker pull quay.io/coreos/flannel:v0.15.1-amd64

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.22.3 k8s.gcr.io/kube-apiserver:v1.22.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.22.3 k8s.gcr.io/kube-controller-manager:v1.22.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.22.3 k8s.gcr.io/kube-scheduler:v1.22.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.22.3 k8s.gcr.io/kube-proxy:v1.22.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5 k8s.gcr.io/pause:3.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0 k8s.gcr.io/etcd:3.5.0-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4 k8s.gcr.io/coredns/coredns:v1.8.4

docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.22.3
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.22.3
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.22.3
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.22.3
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4

 

4.1 4.2 4.3 的步驟在三台服務器都需要執行

 

4.4 初始化集群

在 Master 節點執行

# kubeadm init --apiserver-advertise-address=192.168.1.12 --pod-network-cidr=10.244.0.0/16

其中,192.168.1.12 是 Master 節點的 IP 地址,可根據實際情況修改。

 

4.5 Get "http://localhost:10248/healthz": dial tcp [::1]:10248: connect: connection refused 報錯解決

初始化集群時,如果報以上的錯誤,在 Master 節點按以下步驟操作即可:

 

# vi /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

增加:
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false"

 

cat > /var/lib/kubelet/config.yaml <<EOF
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF

 

# systemctl daemon-reload
# systemctl restart kubelet
# kubeadm reset -f

 

4.6 再次執行集群初始化命令

在 Master 節點執行

# kubeadm init --apiserver-advertise-address=192.168.1.12 --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

Alternatively, if you are the root user, you can run:

export KUBECONFIG=/etc/kubernetes/admin.conf

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.1.12:6443 --token x0u0ou.q6271pyjm7cv5hxl \
--discovery-token-ca-cert-hash sha256:907ffb03d73f7668b96024c328880f95f4249e98da1be44d1caeb01dd62173da

 

4.7 根據上一步的信息 export config 文件 及設置網絡

# export KUBECONFIG=/etc/kubernetes/admin.conf

 

這里我們使用 flannel 網絡

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

 

到此為止,Master 節點搭建完畢。

 

4.8 根據 4.6 步驟的信息,將兩個數據節點加入集群

在 服務器B 和 服務器C,執行如下命令(來源於 4.6 步驟的信息):

# kubeadm join 192.168.1.12:6443 --token x0u0ou.q6271pyjm7cv5hxl \ --discovery-token-ca-cert-hash sha256:907ffb03d73f7668b96024c328880f95f4249e98da1be44d1caeb01dd62173da

 

如果執行不成功,或者數據節點始終是 NotReady 狀態,則參見 4.5 步驟,修改配置。

 

4.9 在 Master 節點,查看集群信息

# kubectl get node

如果狀態都是 Ready,則 Kubernetes(K8s)集群搭建成功。

 

 

5. 綜述

今天聊了一下 如何使用國內的鏡像源搭建 kubernetes(k8s)集群 ,希望可以對大家的工作有所幫助。

歡迎幫忙點贊、評論、轉發、加關注 :)

關注追風人聊Java,每天更新Java干貨。

 

6. 個人公眾號

追風人聊Java,歡迎大家關注


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM