kubeadm安裝kubernets集群


雙12弄了兩台騰訊雲和百度雲機器,組建k8s集群時需要服務器間組成內網環境;

在服務器組成內網后就可以安裝kubernets集群了

因只是自己實驗需要,所以服務器使用openxxx跨雲組建的內網,各位在安裝的時候建議還是使用同一內網環境,並使用2v4G以上服務器推介配置

大家的系統環境及各種安裝包盡量使用同一個版本

備注:因為我的內網環境和普通的略有不通,所以初始化集群的時候及安裝網絡插件的時候,需要額外的操作,強烈建議大家即使是實驗也請組成二層的內網網絡環境來搭建K8S,

 

1,服務器環境:

軟件版本 Kubernetes v1.17.0   Docker version 19.03.5

  master:

    騰訊雲1V2g,CentOS Linux release 7.5.1804 (Core)

    公網IP:x.x.x.x

    內網IP:172.16.10.9

    局域網IP:100.100.100.1

    hostname:shiji.com

  node1:

    百度雲1v2g,CentOS Linux release 7.6.1810 (Core)    

    公網IP:x.x.x.x

    內網IP:172.16.0.4

    局域網IP:100.100.100.3

    hostname:node1

2,每個master和node節點上執行下列操作

  配置系統環境

# 關閉 防火牆 systemctl stop firewalld systemctl disable firewalld # 關閉 SeLinux setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 關閉 swap swapoff -a
# 修改 /etc/sysctl.conf
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf ####開啟路由轉發 echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
# 生效
sysctl -p

  安裝工具

必須先安裝 nfs-utils 才能掛載 nfs 網絡存儲
#yum install -y nfs-utils
#yum install -y wget

  配置阿里docker源

# step 1: 安裝必要的一些系統工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加軟件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新
yum makecache fast

  安裝docker-ce,docker-ce-cli

#yum install -y docker-ce docker-ce-cli
#systemctl enable docker
#systemctl start docker
查看docker版本
#docker --version Docker version 19.03.5, build 633a0ea

  配置阿里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
EOF

  安裝組件

# yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
# systemctl enable kubelet && systemctl start kubelet
備注:此時kubelet啟動失敗  必須完成后面初始化操作后才可以啟動

  配置鏡像加速

#vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
這里是去阿里雲申請的鏡像加速地址

  修改docker服務管理方式為systemd

sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service
這步可以不做,如果沒有修改,集群在初始化和worker節點加入的時候會爆出警告信息

  把master的內網ip,設置個本地解析添加到hosts文件,並設置個節點hostname解析

echo "100.100.100.1    apiserver.shiji" >> /etc/hosts   ####注意這里不要用hostname
echo "100.100.100.3    node1 >> /etc/hosts   

 

3,master初始化,僅在master節點操作

設置初始化配置文件
cat <<EOF > ./kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.17.0
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
controlPlaneEndpoint: "apiserver.shiji:6443"
networking:
  serviceSubnet: "10.20.0.0/16"
  podSubnet: "10.10.0.1/16"
  dnsDomain: "cluster.local"
EOF

注意對應參數,
查看完整配置選項 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
各種如果想修改配置,一定要注意去看下官方文檔:
  在1.15版本當中,kubeadm配置文件API也將由v1beta1升級為v1beta2,也需要注意下集群版本之間配置文件的寫法
localAPIEndpoint:
  advertiseAddress: "172.16.10.9"
  bindPort: 6443
  kubernetesVersion  集群版本, 使用 kubelet --version查看
  controlPlaneEndpoint 
  serviceSubnet   service網段
  podSubnet  pod網段

初始化集群,這里因為我的服務器cpu只有1核  所以忽略掉了cpu數量檢測
kubeadm init --config=kubeadm-config.yaml --upload-certs --ignore-preflight-errors=NumCPU

 初始化成功后會有相關后續信息及相關操作

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/

You can now join any number of the control-plane node running the following command on each as root:

  kubeadm join apiserver.shiji:6443 --token pcubw3.uirtjhun4jau2hep \
    --discovery-token-ca-cert-hash sha256:4d40d0c79a56f0dc89a53547ecd1f320d903890046cd08c7c378fdaa9328c20f \
    --control-plane --certificate-key fbc40ce4548734ced1fcac892ef2ec70719816813783f####################

Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.

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

kubeadm join apiserver.shiji:6443 --token pcubw3.uirtjhun4jau2hep \
    --discovery-token-ca-cert-hash sha256:4d40d0c79a56f0dc89a53547ecd1f320d903890046################# 

 

 完成master節點后續操作

# 配置 kubectl
 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 
#安裝calico網絡插件
wget https://docs.projectcalico.org/v3.9/manifests/calico.yaml
sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico.yaml
kubectl apply -f calico.yaml

#網絡插件這里,因為我是通過openvpn組建的內網,在這里折騰了很久,建議大家后面使用內網搭建集群。
#默認情況下,Calico自動檢測每個節點的IP地址和子網。在大多數情況下,這種自動檢測就足夠了,但是當你的服務器有多個網卡或者網卡有多個地址的時候,可能會識別失敗,
#可以參考下官方文檔 https://docs.projectcalico.org/v3.9/networking/node#understanding-caliconode-ip-autodetection-logic 設置
IP_AUTODETECTION_METHOD
關於幾種網絡插件的區別http://dockone.io/article/8722

# 查看pod狀態,直到所有的容器組處於 Running 狀態 kubectl get pod -n kube-system -o wide

4,worker節點加入集群

kubeadm join apiserver.shiji:6443 --token pcubw3.uirtjhun4jau2hep \
    --discovery-token-ca-cert-hash sha256:4d40d0c79a56f0dc89a53547ecd1f320d903890046################# 

如果忘記加入命令,在master節點上行執行
kubeadm token create --print-join-command

5,master上查看各節點狀態

  kubectl get nodes -o wide

 

6,其他

如果集群初始化出錯需要重新初始化的時候,首先要執行  kubeadm reset -f 


免責聲明!

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



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