【k8s第二步】Kubernetes-Kubeadm部署安裝【已修正錯誤】


⒈開啟kube-proxy的ipvs的前置條件 

  模式改為lvs調度的方式,kube-proxy主要解決的是svc(service)與pod之間的調度關系,ipvs的調度方式可以極大的增加它的訪問效率,所以這種方式現在是我們必備的一種。

  1.加載netfilter模塊

modprobe br_netfilter 

  2.編寫一個引導文件,這個文件將會引導我們lvs的一些相關依賴的加載,注意這里的依賴並不是rpm包含,也是模塊依賴

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash 
modprobe -- ip_vs 
modprobe -- ip_vs_rr 
modprobe -- ip_vs_wrr 
modprobe -- ip_vs_sh 
modprobe -- nf_conntrack_ipv4 
EOF

 

  3.賦予該文件755權限並執行該文件,然后使用lsmod命令查看這些文件是否被引導。

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

⒉安裝Docker

  1.安裝Docker相關依賴

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

  2.導入阿里雲Docker-ce的鏡像倉庫

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  3.更新yum並安裝Docker-ce

yum update -y && yum install -y docker-ce

  4.重啟

reboot

  重啟完成后我們之前在Centos設置默認的啟動內核4.44將被恢復默認到3.10,因此我們需要再次設置一次並重啟

grub2-set-default 'CentoS Linux(4.4.189-1.el7.elrepo.×86_64) 7 (Core)' && reboot

  查看當前使用的內核

uname -r

  5.啟動Docker並設置為開機自啟

systemctl start docker 
systemctl enable docker 

  6.配置daemon文件

cat > /etc/docker/daemon.json <<EOF 
{
    "registry-mirrors":["https://registry.docker-cn.com","https://kxv08zer.mirror.aliyuncs.com"],
    "exec-opts":["native.cgroupdriver=systemd"],
    "log-driver":"json-file",
    "log-opts":{
        "max-size":"100m"
    }
}
EOF
  • exec-opts,設置默認的組為systemd,默認情況下Centos有兩個組,一個fs,一個systemd管理的,為了統一化,我們交給systemd管理。
  • log-driver,讓我們存儲日志的方式改為json文件的形式
  • log-opts,存儲最大為100Mb,這樣我們可以在后期通過war/log/content/去查找對應的容器的日志信息,這樣就可以在EFK里去搜索對應的信息
  • registry-mirrors,設置Docker鏡像加速

  7.創建存儲Docker配置文件的目錄

mkdir -p /etc/systemd/system/docker.service.d

  8.重新讀取配置文件並重啟Docker

systemctl daemon-reload && systemctl restart docker && systemctl enable docker

⒊安裝Kubeadm(主從配置)

  1.導入阿里雲yum倉庫

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=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
EOF

  2.安裝kubeadm初始化工具,命令行管理工具,Docker交互工具

yum -y install kubeadm-1.16.3 kubectl-1.16.3 kubelet-1.16.3

  3.設置kubelet開機自啟

systemctl enable kubelet.service

  因為kubelet需要跟我們的容器接口進行交互,啟動我們的容器,而我們的k8s通過kubeadm安裝出來以后都是以pod的方式存在,也就是底層是以容器的方式運行,所以kubelet一定要是開機自啟的,不然的話,重啟以后k8s集群不會啟動。

⒋初始化k8s主節點

  1.導入鏡像

  初始化之前需要導入鏡像

  kubeadm在初始化k8s集群的時候,會從GCE【谷歌雲服務器】里去拉取鏡像,並且這些鏡像是相當大的,而且速度比較慢,最重要的是,萌新一般都會404,因此我們直接導入離線的鏡像。

  ⅰ導入鏡像

    拖動到虛擬機里會不會啊

  ⅱ解壓鏡像

tar -zxvf kubeadm-basic.images.tar.gz

  ⅲ編寫腳本批量導入鏡像 

vim load-images.sh
#!/bin/bash
ls /root/kubeadm-basic.images > /tmp/image-list.txt
cd /root/kubeadm-basic.images
for i in $( cat /tmp/image-list.txt )
do
    docker load -i $i
done
rm -rf /tmp/image-list.txt
chmod a+x load-images.sh
./load-images.sh

  ⅳ將解壓后的鏡像及腳本復制到其他節點上

scp -r kubeadm-basic.images load-images.sh root@k8s-node01:/root/

  2.開始初始化【這些命令應運行在主節點上】

通過如下指令創建默認的kubeadm-config.yaml文件:

kubeadm config print init-defaults  > kubeadm-config.yaml

kubeadm-config.yaml組成部署說明:

  • InitConfiguration: 用於定義一些初始化配置,如初始化使用的token以及apiserver地址等
  • ClusterConfiguration:用於定義apiserver、etcd、network、scheduler、controller-manager等master組件相關配置項
  • KubeletConfiguration:用於定義kubelet組件相關的配置項
  • KubeProxyConfiguration:用於定義kube-proxy組件相關的配置項

可以看到,在默認的kubeadm-config.yaml文件中只有InitConfiguration、ClusterConfiguration 兩部分。我們可以通過如下操作生成另外兩部分的示例文件:

# 生成KubeletConfiguration示例文件 
kubeadm config print init-defaults --component-configs KubeletConfiguration

# 生成KubeProxyConfiguration示例文件 
kubeadm config print init-defaults --component-configs KubeProxyConfiguration

 

關於kubeadm-config.yaml更多配置語法參考: https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2

使用kubeadm-config.yaml配置主節點:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/control-plane-flags/

kube-proxy開啟ipvs參考: https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/ipvs/README.md

kubelet的配置示例參考: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/kubelet-integration/#configure-kubelets-using-kubeadm

  ⅰ顯示init默認的初始化文件並打印到kubeadm-config.yaml文件中,這樣就拿到了kubeadm默認的初始化模板

kubeadm config print init-defaults > kubeadm-config.yaml

  ⅱ查看並修改kubeadm-config.yaml文件

vim kubeadm-config.yaml
    #修改的內容
    localAPIEndpoint:
        advertiseAddress: 192.168.66.77 //當前服務器的節點地址(當前ip地址)
    kubernetesVersion: v1.16.3 //模板的版本可能與我們實際安裝的版本不同,需要修改
    networking:
        podSubnet: 10.244.0.0/16   //(+)聲明pod的所處網段【注意,必須要添加此內容】默認情況下我們會安裝一個flnode網絡插件去實現覆蓋性網路,它的默認pod網段就這么一個網段,如果這個網段不一致的話,后期我們需要進入pod一個個修改
        serviceSubnet: 10.96.0.0/12 
    #添加的內容【 請注意,在Kubernetes 1.11和更高版本中,默認 SupportIPVSProxyMode 設置為 true,因此高版本中此部分可省略 。github文檔:https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/ipvs/README.md
    apiVersion: kubeproxy.config.k8s.io/v1alpha1 //把默認的調度方式改為ipvs調度模式
    kind: KubeProxyConfiguration
    kubeProxy:
        config:
            featureGates:
                SupportIPVSProxyMode: true
            mode: ipvs

  ⅲ開始進行初始化

#使用指定的yaml文件進行初始化安裝 自動頒發證書(1.13后支持) 把所有的信息都寫入到 kubeadm-init.log中
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
--experimental-upload-certs已被棄用,官方推薦使用--upload-certs替代,官方公告:https://v1-15.docs.kubernetes.io/docs/setup/release/notes/

   ⅳ通過初始化日志查看初始化過程中的信息

vim kubeadm-init.log

  *日志信息一般有以下幾點:

1.最開始告訴我們kubernetes的版本
2.檢測當前運行環境
3.為k8s集群下載鏡像【時間很長,鏡像需要從Google GCE下載】
4.開始安裝鏡像
5.在/var/lib/kubelet/kubeadm-flags.env文件中保存了kubelet環境變量
6.在/var/lib/kubelet/config.yaml文件中保存了kubelet配置文件
7.在/etc/kubernetes/pki目錄中保存了k8s所使用的所有的證書,因為k8s采用了http協議進行的C/S結構的開發,它為了安全性考慮在所有的組件通訊的時候采用的是https的雙向認證的方案,所以k8s需要大量的CE證書以及私鑰密鑰
8.配置DNS以及當前默認的域名【svc(service)的默認名稱】
9.生成k8s組件的密鑰
10。指定DNS的名稱及地址
11.在/etc/kubernetes目錄下生成k8s組件的配置文件
12.RBAC授權
13.初始化成功

  ⅴ初始化完成后需要的工作

    在當前的用戶的Home目錄下創建.kube目錄(這個目錄中保存我們的連接配置,kubectl和kubeApi進行https通訊,所以有一些緩存需要保存以及一些認證文件)

mkdir -p $HOME/.kube

    拷貝集群管理員的配置文件到這個目錄下

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

    授予權限(所有者 所有組授予當前的用戶)

sudo chown $(id -u):$(id -g) $HOME/.kube/config

    查看k8s節點狀態

kubectl get node

    此時主節點狀態為NotReady,因為k8s需要扁平化的網絡,此時k8s中還沒有構建flannel網絡插件

  ⅵ安裝flannel網絡插件

    下載flannel yaml文件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    創建flannel

kubectl create -f kube-flannel.yml

    查看flannel是否部署成功【系統組件默認在kube-system命名空間下】,同樣使用ifconfig也可以看到flannel

kubectl get pod -n kube-system

    此時查看node狀態應該為Ready狀態

  ⅶ將k8s子節點加入到k8s主節點【命令在vim kubeadm-init.log中】,該命令在子節點運行

  **如果子節點在加入主節點之前未導入鏡像,建議在加入主節點之前導入鏡像或執行以下命令下載鏡像

kubeadm config images pull

  將k8s子節點加入到k8s主節點

kubeadm join masterIp:masterPort --token xxx

  此時查看node節點應該有3個,但子節點狀態為notReady,等待子節點的flannel初始化完成即可。

  *如果子節點執行加入主節點的命令報錯的話,可以嘗試執行kubeadm reset命令后重試

  

 

 

 
       


免責聲明!

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



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