Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

零基礎入門雲原生-k8s安裝配置及運行~

恒生LIGHT雲社區 2021-08-18 15:24:23 阅读数:5907 评论数:0 点赞数:0 收藏数:0

作者:石義峰

來源:恒生LIGHT雲社區

1.png

k8s安裝配置運行

安裝環境建議

k8s系統由一組可執行程序組成,可在GitHub上k8s項目頁面下載編譯好的二進制安裝包,也可直接下載其源碼編譯後安裝。

安裝環境可參照k8s官網,建議如下:

  • 一臺兼容的 Linux 主機。Kubernetes 項目為基於 Debian 和 Red Hat 的 Linux 發行版以及一些不提供包管理器的發行版提供通用的指令
  • 每臺機器 2 GB 或更多的 RAM (如果少於這個數字將會影響你應用的運行內存)
  • 2 CPU 核或更多
  • 集群中的所有機器的網絡彼此均能相互連接(公網和內網都可以)
  • 節點之中不可以有重複的主機名、MAC 地址或 product_uuid。請參見這裏了解更多詳細信息。
  • 開啟機器上的某些端口。請參見這裏 了解更多詳細信息。
  • 禁用交換分區。為了保證 kubelet 正常工作,你必須 禁用交換分區。
軟硬件 推薦配置
CPU/內存 Master:至少2C2G
Node:根據具體需要運行的容器數量調整
Linux操作系統 Redhat 7+
Centos 7+
K8S 1.18+
下載地址及說明:github.com/kubernetes/…
docker 1.13+
下載地址及說明:www.docker.com
etcd 3+
下載地址及說明:github.com/coreos/etcd…

版本偏差策略

kube-apiserver

在HA 集群中, 多個 kube-apiserver 實例小版本號最多差1。

kubelet

kubelet 版本號不能高於 kube-apiserver,最多可以比 kube-apiserver 低兩個小版本。

說明: 如果 HA 集群中多個 kube-apiserver 實例版本號不一致,相應的 kubelet 版本號可選範圍也要减小。

kube-controller-manager、 kube-scheduler 和 cloud-controller-manager

kube-controller-managerkube-schedulercloud-controller-manager 版本不能高於 kube-apiserver 版本號。 最好它們的版本號與 kube-apiserver 保持一致,但允許比 kube-apiserver 低一個小版本(為了支持在線昇級)。

說明: 如果在 HA 集群中,多個 kube-apiserver 實例版本號不一致,他們也可以跟 任意一個 kube-apiserver 實例通信(例如,通過 load balancer), 但 kube-controller-managerkube-schedulercloud-controller-manager 版本可用範圍會相應的减小。

kubectl

kubectl 可以比 kube-apiserver 高一個小版本,也可以低一個小版本。

說明: 如果 HA 集群中的多個 kube-apiserver 實例版本號不一致,相應的 kubectl 可用版本範圍也會减小。

k8s安裝

確保每個節點上 MAC 地址和 product_uuid 的唯一性

  • 你可以使用命令ip linkifconfig -a 來獲取網絡接口的 MAC 地址
  • 可以使用sudo cat /sys/class/dmi/id/product_uuid 命令對 product_uuid 校驗

一般來講,硬件設備會擁有唯一的地址,但是有些虛擬機的地址可能會重複。 Kubernetes 使用這些值來唯一確定集群中的節點。 如果這些值在每個節點上不唯一,可能會導致安裝失敗。

檢查網絡適配器

如果你有一個以上的網絡適配器,同時你的 Kubernetes 組件通過默認路由不可達,我們建議你預先添加 IP 路由規則,這樣 Kubernetes 集群就可以通過對應的適配器完成連接。

允許iptables檢查橋接流量

確保 br_netfilter 模塊被加載。這一操作可以通過運行 lsmod | grep br_netfilter 來完成。若要顯式加載該模塊,可執行 sudo modprobe br_netfilter

為了讓你的 Linux 節點上的 iptables 能够正確地查看橋接流量,你需要確保在你的 sysctl 配置中將 net.bridge.bridge-nf-call-iptables 設置為 1。例如:

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
sudo sysctl --system
複制代碼

檢查所需端口

控制節點

協議 方向 端口範圍 作用 使用者
TCP 入站 6443 Kubernetes API 服務器 所有組件
TCP 入站 2379-2380 etcd 服務器客戶端 API kube-apiserver, etcd
TCP 入站 10250 Kubelet API kubelet 自身、控制平面組件
TCP 入站 10251 kube-scheduler kube-scheduler 自身
TCP 入站 10252 kube-controller-manager kube-controller-manager 自身

工作節點

協議 方向 端口範圍 作用 使用者
TCP 入站 10250 Kubelet API kubelet 自身、控制平面組件
TCP 入站 30000-32767 NodePort 服務† 所有組件

以上是節點的默認端口範圍,需要保證所定制的端口是開放的。

雖然控制節點已經包含了 etcd 的端口,也可以使用自定義的外部 etcd 集群,或是指定自定義端口。

使用的 Pod 網絡插件 也可能需要某些特定端口開啟。由於各個 Pod 網絡插件都有所不同, 請參閱各自文檔中對端口的要求。

安裝runtime:containerd/docker

安裝containerd

安裝和配置的先决條件:

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
 # 設置必需的 sysctl 參數,這些參數在重新啟動後仍然存在。
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
 # 應用 sysctl 參數而無需重新啟動
sudo sysctl --system
複制代碼

安裝 :

  1. 從官方Docker倉庫安裝 containerd.io 軟件包。可以在 安裝 Docker 引擎 中找到有關為各自的 Linux 發行版設置 Docker 存儲庫和安裝 containerd.io 軟件包的說明。

  2. 配置 containerd:

    sudo mkdir -p /etc/containerd
    containerd config default | sudo tee /etc/containerd/config.toml
    複制代碼
  3. 重新啟動 containerd:

    sudo systemctl restart containerd
    複制代碼

安裝Docker

  1. 在每個節點上,根據安裝 Docker 引擎 為你的 Linux 發行版安裝 Docker。 最新的經過驗證的 Docker 版本 依賴關系github.com/kubernetes/…

  2. 配置 Docker 守護程序,尤其是使用 systemd 來管理容器的 cgroup。

    sudo mkdir /etc/docker
    cat <<EOF | sudo tee /etc/docker/daemon.json
    {
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m"
    },
    "storage-driver": "overlay2"
    }
    EOF
    複制代碼

    說明: 對於運行 Linux 內核版本 4.0 或更高版本,或使用 3.10.0-51 及更高版本的 RHEL 或 CentOS 的系統,overlay2是首選的存儲驅動程序。

  3. 重新啟動 Docker 並在啟動時啟用:

    sudo systemctl enable docker
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    複制代碼

安裝kubeadm、kubelet、kubectl

  • kubeadm:用來初始化集群的指令。
  • kubelet:在集群中的每個節點上用來啟動 Pod 和容器等。
  • kubectl:用來與集群通信的命令行工具。

#獲取

cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=mirrors.aliyun.com/kubernetes/… enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=mirrors.aliyun.com/kubernetes/… mirrors.aliyun.com/kubernetes/… EOF

#安裝 yum install kubelet kubeadm kubectl

安裝k8s集群

初始化控制節點

控制平面節點是運行控制平面組件的機器, 包括 etcd(集群數據庫) 和 API Server(命令行工具 kubectl與之通信)。

  1. (推薦)如果計劃將單個控制平面 kubeadm 集群昇級成高可用, 你應該指定--control-plane-endpoint 為所有控制平面節點設置共享端點。 端點可以是負載均衡器的 DNS 名稱或 IP 地址。
  2. 選擇一個Pod網絡插件,並驗證是否需要為kubeadm init 傳遞參數。 根據你選擇的第三方網絡插件,你可能需要設置--pod-network-cidr 的值。

要初始化控制平面節點,運行:

kubeadm init <args>
複制代碼

示例參考:

kubeadm init --image-repository=daocloud.io/daocloud --kubernetes-version=v1.17.4 --pod-network-cidr=10.252.0.0/16 --upload-certs

配置kubectl

要使非 root 用戶可以運行 kubectl,請運行以下命令, 它們也是 kubeadm init 輸出的一部分:

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

或者,如果你是 root 用戶,則可以運行:

export KUBECONFIG=/etc/kubernetes/admin.conf
複制代碼

加入節點

節點是你的工作負載(容器和 Pod 等)運行的地方。要將新節點添加到集群,請對每臺計算機執行以下操作:

  • SSH 到機器
  • 成為 root (例如sudo su -
  • 運行kubeadm init 輸出的命令。例如:
kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>
複制代碼

如果沒有令牌,可以通過在控制平面節點上運行以下命令來獲取令牌:

kubeadm token list
複制代碼

輸出類似於以下內容:

TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
8ewj1p.9r9hcjoqgajrj4gi 23h 2018-06-12T02:51:28Z authentication, The default bootstrap system:
signing token generated by bootstrappers:
'kubeadm init'. kubeadm:
default-node-token
複制代碼

默認情况下,令牌會在24小時後過期。如果要在當前令牌過期後將節點加入集群, 則可以通過在控制平面節點上運行以下命令來創建新令牌:

kubeadm token create
複制代碼

輸出類似於以下內容:

5didvk.d09sbcov8ph2amjw
複制代碼

如果你沒有 --discovery-token-ca-cert-hash 的值,則可以通過在控制平面節點上執行以下命令鏈來獲取它:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
複制代碼

輸出類似於以下內容:

8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78
複制代碼

安裝CNI

這裏采用calico:

kubectl apply -f docs.projectcalico.org/v3.14/manif…

運行第一個hello world

kubectl run -it --rm [定義的名稱] --image=[你的鏡像地址]--restart=Never -- echo “hello world"

版权声明
本文为[恒生LIGHT雲社區]所创,转载请带上原文链接,感谢

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;

支付宝红包,每日可领