附003.Kubeadm部署Kubernetes

来源:https://www.cnblogs.com/itzgr/archive/2019/06/19/11050543.html
-Advertisement-
Play Games

一 kubeadm介紹1.1 概述Kubeadm 是一個工具,它提供了 kubeadm init 以及 kubeadm join 這兩個命令作為快速創建 kubernetes 集群的最佳實踐。kubeadm 通過執行必要的操作來啟動和運行一個最小可用的集群。kubeadm 只關心啟動集群,而不關心其... ...


一 kubeadm介紹

1.1 概述

Kubeadm 是一個工具,它提供了 kubeadm init 以及 kubeadm join 這兩個命令作為快速創建 kubernetes 集群的最佳實踐。 kubeadm 通過執行必要的操作來啟動和運行一個最小可用的集群。kubeadm 只關心啟動集群,而不關心其他工作,如部署前的節點準備工作、安裝各種Kubernetes Dashboard、監控解決方案以及特定雲提供商的插件,這些都不屬於 kubeadm 關註範圍。

1.2 kubeadm功能

  • kubeadm init 啟動一個 Kubernetes 主節點;
  • kubeadm join 啟動一個 Kubernetes 工作節點並且將其加入到集群;
  • kubeadm upgrade 更新一個 Kubernetes 集群到新版本;
  • kubeadm config 如果使用 v1.7.x 或者更低版本的 kubeadm 初始化集群,您需要對集群做一些配置以便使用 kubeadm upgrade 命令;
  • kubeadm token 管理 kubeadm join 使用的令牌;
  • kubeadm reset 還原 kubeadm init 或者 kubeadm join 對主機所做的任何更改;
  • kubeadm version 列印 kubeadm 版本;
  • kubeadm alpha 預覽一組可用的新功能以便從社區搜集反饋。

二 kubeadm安裝

2.1 前置條件

相應的充足資源的Linux伺服器; 建議關閉SELinux及防火牆:sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config && systemctl stop firewalld Mac及UUID唯一; 若未關閉防火牆則建議放通相應埠,如下: Master節點——
規則 方向 埠範圍 作用 使用者
TCP Inbound 6443* Kubernetes API server All
TCP Inbound 2379-2380 etcd server client API kube-apiserver, etcd
TCP Inbound 10250 Kubelet API Self, Control plane
TCP Inbound 10251 kube-scheduler Self
TCP Inbound 10252 kube-controller-manager Self
Worker 節點
規則 方向 埠範圍 作用 使用者
TCP Inbound 10250 Kubelet API Self, Control plane
TCP Inbound 30000-32767 NodePort Services** All
其他更多前置準備見:https://kubernetes.io/zh/docs/setup/independent/install-kubeadm/

2.2 節點規劃

節點 IP 類型
Master 172.24.8.71 Kubernetes master節點
node1 172.24.8.72 Kubernetes node節點1
node2 172.24.8.73 Kubernetes node節點2

提示:本實驗使用單master部署,生產中可部署奇數個master以做高可用。

2.3 手動添加解析

  1 [root@master ~]# cat <<EOF >> /etc/hosts
  2 172.24.8.71 master
  3 172.24.8.72 node1
  4 172.24.8.73 node2
  5 EOF

提示:所有節點均建議如上操作。

2.4 修正iptables

  1 [root@k8s_master ~]# cat <<EOF >> /etc/sysctl.d/k8s.conf
  2 net.bridge.bridge-nf-call-ip6tables = 1
  3 net.bridge.bridge-nf-call-iptables = 1
  4 net.ipv4.ip_forward = 1
  5 EOF
  6 [root@master ~]# modprobe br_netfilter
  7 [root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf

提示:所有節點均建議如上操作。

2.5 載入IPVS

pod的負載均衡是用kube-proxy來實現的,實現方式有兩種,一種是預設的iptables,一種是ipvs,相對iptables,ipvs有更好的性能。且當前ipvs已經加入到了內核的主幹。 為kube-proxy開啟ipvs的前提需要載入以下的內核模塊: ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack_ipv4
  1 [root@master ~]# cat > /etc/sysconfig/modules/ipvs.modules <<EOF
  2 #!/bin/bash
  3 modprobe -- ip_vs
  4 modprobe -- ip_vs_rr
  5 modprobe -- ip_vs_wrr
  6 modprobe -- ip_vs_sh
  7 modprobe -- nf_conntrack_ipv4
  8 EOF
  9 [root@master ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules
 10 [root@master ~]# bash /etc/sysconfig/modules/ipvs.modules
 11 [root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
 12 [root@master ~]# yum -y install ipvsadm
001 提示:所有節點均建議如上操作。 為了更好的管理和查看ipvs,可安裝相應的管理工具《002.LVS管理工具的安裝與使用》。

2.6 安裝Docker

  1 [root@master ~]# yum -y update
  2 [root@master ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
  3 [root@master ~]# yum-config-manager \
  4 --add-repo \
  5 http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  6 [root@master ~]# yum list docker-ce --showduplicates | sort -r		#查看可用版本
  7 [root@master ~]# yum -y install docker-ce-18.09.0-3.el7			#kubeadm當前不支持18.09以上版本
  8 [root@master ~]# mkdir /etc/docker
  9 [root@master ~]# cat > /etc/docker/daemon.json <<EOF
 10 {
 11   "exec-opts": ["native.cgroupdriver=systemd"],
 12   "log-driver": "json-file",
 13   "log-opts": {
 14     "max-size": "100m"
 15   },
 16   "storage-driver": "overlay2",
 17   "storage-opts": [
 18     "overlay2.override_kernel_check=true"
 19   ]
 20 }
 21 EOF								#配置system管理cgroup
 22 [root@master ~]# vi /usr/lib/systemd/system/docker.service	#更改docker鏡像路徑
 23 ExecStart=/usr/bin/dockerd-current --data-root=/data/docker	#修改為獨立的單獨路徑
 24 [root@master ~]# systemctl daemon-reload
 25 [root@master ~]# systemctl restart docker
 26 [root@master ~]# systemctl enable docker
 27 [root@master ~]# iptables -nvL		#確認iptables filter表中FOWARD鏈的預設策略(pllicy)為ACCEPT
002提示:所有節點均建議如上操作。

Kubernetes 1.13版本相容docker版本等可參考:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.13.md。

2.7 相關組件包

需要在每台機器上都安裝以下的軟體包: kubeadm: 用來初始化集群的指令; kubelet: 在集群中的每個節點上用來啟動 pod 和 container 等; kubectl: 用來與集群通信的命令行工具。 kubeadm 不能 幫您安裝或管理 kubelet 或 kubectl ,所以得保證他們滿足通過 kubeadm 安裝的 Kubernetes 控制層對版本的要求。如果版本沒有滿足要求,可能導致一些意外錯誤或問題。 具體相關組件安裝見《附001.kubectl介紹及使用》。

2.8 正式安裝

  1 [root@master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  2 [kubernetes]
  3 name=Kubernetes
  4 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  5 enabled=1
  6 gpgcheck=1
  7 repo_gpgcheck=1
  8 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  9 EOF
 10 #配置yum源
 11 [root@master ~]# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
002 說明:同時安裝了cri-tools, kubernetes-cni, socat三個依賴: socat:kubelet的依賴; cri-tools:即CRI(Container Runtime Interface)容器運行時介面的命令行工具。
  1 [root@master ~]# systemctl enable kubelet
提示:所有節點均建議如上操作。此時不需要啟動kubelet,初始化的過程中會自動啟動的,如果此時啟動了會出現報錯,忽略即可。

2.9 其他調整

Kubernetes 從1.8版本開始要求關閉系統的Swap,如果不關閉,預設配置下kubelet將無法啟動。
  1 [root@master ~]# echo "vm.swappiness=0" >> /etc/sysctl.d/k8s.conf
  2 [root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
提示:同時需要註意fstba等系統掛載的swap。

三 初始化最簡集群-Mater

3.1 Master上初始化

  1 [root@master ~]# kubeadm init --kubernetes-version=v1.14.0 --pod-network-cidr=10.244.0.0/16
003
  1 [root@master ~]# mkdir -p $HOME/.kube
  2 [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3 [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
提示:選擇flannel作為Pod網路插件,所以上面的命令指定–pod-network-cidr=10.244.0.0/16。 預設使用k8s.gcr.io拉取鏡像,國內用戶可通過以下命令使用阿裡源: kubeadm init --kubernetes-version=v1.14.0 --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
  1 [root@master ~]# export KUBECONFIG=$HOME/.kube/config			#聲明配置文件
附加:初始化過程粗略解析: 004 初始化Kubernetes大致步驟如下:
  • [kubelet-start] 生成kubelet的配置文件”/var/lib/kubelet/config.yaml”
  • [certificates]生成相關的各種證書
  • [kubeconfig]生成相關的kubeconfig文件
  • [bootstraptoken]生成token記錄下來,後邊使用kubeadm join往集群中添加節點時會用到
提示:若初始化異常可通過[root@master ~]# kubeadm reset && rm -rf $HOME/.kube重置。

3.2 查看集群狀態

  1 [root@master ~]# kubectl get cs
  2 NAME                 STATUS    MESSAGE             ERROR
  3 controller-manager   Healthy   ok
  4 scheduler            Healthy   ok
  5 etcd-0               Healthy   {"health":"true"}

四 安裝flannel插件

4.1 NIC插件介紹

Calico 是一個安全的 L3 網路和網路策略提供者。 Canal 結合 Flannel 和 Calico, 提供網路和網路策略。 Cilium 是一個 L3 網路和網路策略插件, 能夠透明的實施 HTTP/API/L7 策略。 同時支持路由(routing)和疊加/封裝( overlay/encapsulation)模式。 Contiv 為多種用例提供可配置網路(使用 BGP 的原生 L3,使用 vxlan 的 overlay,經典 L2 和 Cisco-SDN/ACI)和豐富的策略框架。Contiv 項目完全開源。安裝工具同時提供基於和不基於 kubeadm 的安裝選項。 Flannel 是一個可以用於 Kubernetes 的 overlay 網路提供者。 Romana 是一個 pod 網路的層 3 解決方案,並且支持 NetworkPolicy API。Kubeadm add-on 安裝細節可以在這裡找到。 Weave Net 提供了在網路分組兩端參與工作的網路和網路策略,並且不需要額外的資料庫。 CNI-Genie 使 Kubernetes 無縫連接到一種 CNI 插件,例如:Flannel、Calico、Canal、Romana 或者 Weave。 提示:本實驗使用flannel插件,附加演示了另一種插件Weave的安裝。

4.2 下載flannel配置

  1 [root@master ~]# mkdir flannel
  2 [root@master ~]# cd flannel/
  3 [root@master flannel]# wget https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml
  4 [root@master flannel]# kubectl apply -f kube-flannel.yml
  5 [root@master ~]# kubectl get pod --all-namespaces -o wide	#查看相關pod

005 延伸: 使用kubeadm初始化的集群,出於安全考慮Pod不會被調度到Master Node上,其策略是因為當前的master節點node1被打上了node-role.kubernetes.io/master:NoSchedule的污點:
  1 [root@master ~]# kubectl describe node master | grep Taint
  2 Taints:             node-role.kubernetes.io/master:NoSchedule

附加:安裝weave插件
  1 [root@master ~]# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
提示:kubeadm 只支持基於容器網路介面(CNI)的網路而且不支持 kubenet。
  1 [root@master ~]# kubectl get pods --all-namespaces						#查看驗證
  2 [root@master ~]# kubectl get nodes

007 提示:更多Kubetcl使用參考:https://kubernetes.io/docs/reference/kubectl/kubectl/ https://kubernetes.io/docs/reference/kubectl/overview/ 更多kubeadm使用參考:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

五 Node節點安裝

5.1 node節點準備

執行完所有2.2——2.9步驟。

5.2 加入集群

  1 [root@node1 ~]# echo "1" >/proc/sys/net/ipv4/ip_forward
  2 [root@node1 ~]# kubeadm join 172.24.8.71:6443 --token v6xij5.cdhd5h5hspohf1kc \
  3     --discovery-token-ca-cert-hash sha256:94b9a19c3d4b9bd7b4f0ff86a882dad5fe4549b0365626e7f4d26831c9caa0c4
  4 [root@node2 ~]# echo "1" >/proc/sys/net/ipv4/ip_forward
  5 [root@node2 ~]# kubeadm join 172.24.8.71:6443 --token v6xij5.cdhd5h5hspohf1kc \
  6     --discovery-token-ca-cert-hash sha256:94b9a19c3d4b9bd7b4f0ff86a882dad5fe4549b0365626e7f4d26831c9caa0c4

008 註意:預設為0,修改為1,則開啟IP轉發功能,修改後立刻生效,但重啟後失效。

5.3 確認驗證

  1 [root@master ~]# kubectl get nodes						#節點狀態
  2 [root@master ~]# kubectl get cs							#組件狀態
  3 [root@master ~]# kubectl get serviceaccount					#服務賬戶
  4 [root@master ~]# kubectl cluster-info						#集群信息
  5 [root@master ~]# kubectl get pod -n kube-system -o wide				#所有服務狀態

009 提示:更多Kubetcl使用參考:https://kubernetes.io/docs/reference/kubectl/kubectl/ https://kubernetes.io/docs/reference/kubectl/overview/ 更多kubeadm使用參考:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

六 開啟IPVS

6.1 修改ConfigMap

  1 [root@master ~]# kubectl edit cm kube-proxy -n kube-system		#模式改為ipvs
  2 ……
  3 mode: "ipvs"
  4 ……
  5 [root@master ~]# kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
  6 [root@master ~]# kubectl get pod -n kube-system | grep kube-proxy	#查看proxy的pod
  7 [root@master ~]# kubectl logs kube-proxy-mgqfs -n kube-system		#查看任意一個proxy pod的日誌

010
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、官網下載 https://dev.mysql.com/downloads/mysql/ 2、解壓到合適的目錄 3、配置環境變數 ①、 path ②、MYSQL_HOME 4、新建一個my.ini 用記事本打開,複製以下代碼, 沒有my.ini 資料庫啟動時無法初始化參數 5.進入MySQL的bi ...
  • 0元玩轉阿裡雲伺服器 0元輕鬆玩轉阿裡雲伺服器,在阿裡雲伺服器上面發佈自己寫的項目,誰還沒有點脾氣。 一、阿裡雲伺服器篇 進入阿裡雲首頁:https://www.aliyun.com 點擊頁面右上角的“免費註冊”,簡單註冊下就OK了。 然後再次進入首頁,最新活動 》新手上路 --》阿裡雲免費套餐 - ...
  • Linux用戶與用戶組 Linux系統是一個多用戶多任務的分時操作系統,任何一個要使用系統資源的用戶,都必須首先向系統管理員申請一個賬號,然後以這個賬號的身份進入系統。 用戶的賬號一方面可以幫助系統管理員對使用系統的用戶進行跟蹤,並控制他們對系統資源的訪問;另一方面也可以幫助用戶組織文件,併為用戶提 ...
  • 回到目錄 二極體加電容還有一個比較經典的用法就是倍壓電路(voltage-multiplier circuits),這個以前在電視機和顯像管中比較常用,現在用得比較少了,我們稍微瞭解一下即可。簡單來說,倍壓電路可以將輸出電壓變為輸入電壓峰值Vm的2倍。其電路圖如下所示 圖 2-6.01 當輸入電壓v ...
  • 1 安裝ubuntu12.04 (如果使用下載明遠智睿的虛擬機,請直接跳到 下載源碼並解壓 這一節)在這裡建議用戶使用64bit的ubuntu12.04的操作系統,已經真機編譯驗證過。 2 安裝JDK1.6 SE 登陸htttp://www。myzr。Com。cn的下載專區,下載jdk-6u45-l ...
  • Fish是一個智能且用戶友好的命令行shell,適用於macOS,Linux和其他家族。fish包含語法突出顯示、根據你鍵入字元自動提示autosuggest-as-type和花式選項卡完成等功能,無需配置。 Banq註:其中autosuggest-as-type是最棒的,因為Linux下鍵入命令有 ...
  • "第一階段 快捷鍵 1" "第二階段 文件和目錄操作命令 1" "1.1 date / useradd 1" "1.2 echo 調用變數 2" "1.3 whoami 查看用戶名 2" "1.4 tab命令補全 2" "1.5 history 歷史命令 2" "1.6 alias 別名 3" "1 ...
  • [toc] Day02 1.2 1.2.1mv mv 移動 move OPTION]... 源文件 目標 i 交互 t 交換目標和原文件 1.如果目標是一個目錄你,就把文件放入目錄 2.如果目標是一個文件,就會被覆蓋 3,如果目標不存在,改名 [root@db04 ~] mv file /tmp/ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...