20 分鐘使用 Kubespray 搞定 K8s 單機版安裝

歡迎訪問博客原文

本文分享 K8s 單機版本 v1.16.3 安裝步驟,安裝過程20分鐘以內。

K8s最新 Release 版本爲 v1.16.4v1.18.0 還是 alpha 版本。

資源需求

  • Master 節點:2 核 2G,本次採用騰訊雲按流量計費的 2核4G 服務器,帶寬20M用於下載資源。
  • Master 節點局域網IP:172.17.0.7
  • OS:CentOS 7.6 64位

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MRkuPZP2-1578838895246)(https://imgcdn.chenyongjun.vip/2020/01/12/3.png)]

關於 Kubespray

Kubespray 在 GitHub 描述是:“Deploy a Production Ready Kubernetes Cluster”

Google 的開源工具,用於部署生產級的 K8s 集羣。

在騰訊雲購買了一臺 美國硅谷ECS,使用 kubespray 安裝K8s,耗時約10分鐘左右,速度很快,這是國外開發者的體驗。

在晚上跑個Job,將所需的鏡像、工具上傳到國內,後續會繼續更新新版本的資源,詳見最後的附錄。

安裝步驟

基礎準備

這一小節內容在master節點、普通節點都需要執行,本次僅演示master節點。

  • 關閉 SELinux 並修改配置文件爲 disabled
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
  • 關閉防火牆
systemctl disable firewalld
systemctl stop firewalld
  • 安裝必要軟件

EPEL (Extra Packages for Enterprise Linux):自動配置yum的軟件倉庫
ansible:自動化運維工具
Jinja2:基於python的模板引擎

yum install -y epel-release ansible
yum install -y python36 python36-devel python36-pip
pip3 install --upgrade Jinja2

處理密鑰

生成ssh公私鑰對,不要設置密碼,直接三次回車即可。僅需在 master 節點生成,普通節點不用處理

ssh-keygen

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1sNaRS9f-1578838895247)(https://imgcdn.chenyongjun.vip/2020/01/12/5.png)]

將密鑰分發給節點建立SSH通道,此處master也作爲普通節點需要分發。若添加新節點也需執行該步驟。

ssh-copy-id [email protected]

處理 kubespray

下載 kubespray

wget https://github.com/kubernetes-sigs/kubespray/archive/v2.12.0.tar.gz
tar -zxvf v2.12.0.tar.gz
mv kubespray-2.12.0 kubespray

安裝依賴

以下所有命令均在 kubespray 目錄執行。

cd kubespray
pip3.6 install -r requirements.txt

生成集羣host文件

sample 是樣例配置,拷貝出一個新的 mycluster。

cp -rfp inventory/sample inventory/mycluster

通過 Ansible invendor builder 工具, 自動生成 ansible inventory file,IPS中有多個IP(多個節點)時以空格隔開。

declare -a IPS=(172.17.0.7)
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

自動生成的 yaml 配置文件如下,將其中的 node1 節點名稱改爲 master,這樣後續普通節點可從 node1 開始命名。

all:
  hosts:
    node1:
      ansible_host: 172.17.0.7
      ip: 172.17.0.7
      access_ip: 172.17.0.7
  children:
    kube-master:
      hosts:
        node1:
    kube-node:
      hosts:
        node1:
    etcd:
      hosts:
        node1:
    k8s-cluster:
      children:
        kube-master:
        kube-node:
    calico-rr:
      hosts: {}

修改資源地址

安裝時默認從國外下載資源,我已將資源上傳到騰訊雲,直接從騰訊雲下載即可,需修改下配置。

  • 修改 inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml

版本、鏡像下載地址、鏡像cheksum都在該文件中。

原內容:kube_image_repo: "{{ gcr_image_repo }}/google-containers"
修改爲:kube_image_repo: "ccr.ccs.tencentyun.com/easyk8s"
  • 修改 roles/download/defaults/main.yml

下載的資源配置均在其中,下面例舉幾個:

kubelet_download_url: "https://storage.googleapis.com/kubernetes-release/release/{{ kube_version }}/bin/linux/{{ image_arch }}/kubelet"
...
etcd_image_repo: "{{ quay_image_repo }}/coreos/etcd"
etcd_image_repo: "{{ quay_image_repo }}/etcd"

需要修改的配置有:

  • kubelet_download_url、kubectl_download_url、kubeadm_download_url、etcd_download_url、cni_download_url、calicoctl_download_url
  • etcd_image_repo、calico_node_image_repo、calico_cni_image_repo、calico_policy_image_repo、coredns_image_repo、dashboard_image_repo

如想手工調整,可參考如下例子:

原內容:etcd_image_repo: "{{ quay_image_repo }}/coreos/etcd"
修改爲:etcd_image_repo: "{{ quay_image_repo }}/etcd"

主要是去掉namespace,騰訊雲namespace只能有一段。

我已調整好,可直接執行下面命令獲取配置

wget https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/main.yml
mv main.yml roles/download/defaults/main.yml

wget https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/download_file.yml
mv download_file.yml roles/download/tasks/download_file.yml

download_file.yml 主要加了日誌,例如下面拼接了 “{{ download.url }}”

- block:
  - name: download_file | Starting download of file | "{{ download.url }}"

安裝

上述配置OK後,直接安裝即可。從騰訊雲下載比較快,大約十幾分鍾即可安裝完成。

ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml -b -v --private-key=~/.ssh/id_rsa

安裝完後,日誌會打印所有時間信息,雖然不太準。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8k7gA8sn-1578838895248)(https://imgcdn.chenyongjun.vip/2020/01/12/6.png)]

安裝好後看看集羣基礎信息。

查看節點信息

[root@master ~]# kubectl get no
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   10h   v1.16.3

查看集羣信息

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nMXuf1Le-1578838895248)(https://imgcdn.chenyongjun.vip/2020/01/12/7.png)]

查看所有Pod信息

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8EN9qMrz-1578838895249)(https://imgcdn.chenyongjun.vip/2020/01/12/8.png)]

至此,安裝完畢,消耗時間在20分鐘內。

小結

kubespray 很贊,安裝非常簡單,體驗一下就好。

如果使用雲服務,直接購買容器服務最方便,提供了K8s各類對象管理控制檯。

如果內網自建,就需要自行管理集羣。

附錄

鏡像資源

所需鏡像如下:

gcr.io/google-containers/k8s-dns-node-cache
gcr.io/google-containers/kube-proxy
gcr.io/google-containers/kube-apiserver
gcr.io/google-containers/kube-controller-manager
gcr.io/google-containers/kube-scheduler
gcr.io/google-containers/cluster-proportional-autoscaler-amd64
gcr.io/google_containers/kubernetes-dashboard-amd64
gcr.io/google-containers/pause 
gcr.io/google_containers/pause-amd64
coredns/coredns
calico/node
calico/cni
calico/kube-controllers
quay.io/coreos/etcd

在騰訊雲容器服務的公有鏡像中搜 easyk8s

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-t7Eb7QLm-1578838895249)(https://imgcdn.chenyongjun.vip/2020/01/12/4.png)]

可一次拉取下來。

docker pull ccr.ccs.tencentyun.com/easyk8s/k8s-dns-node-cache:1.15.8
docker pull ccr.ccs.tencentyun.com/easyk8s/kube-proxy:v1.16.3
docker pull ccr.ccs.tencentyun.com/easyk8s/kube-apiserver:v1.16.3
docker pull ccr.ccs.tencentyun.com/easyk8s/kube-controller-manager:v1.16.3
docker pull ccr.ccs.tencentyun.com/easyk8s/kube-scheduler:v1.16.3
docker pull ccr.ccs.tencentyun.com/easyk8s/coredns:1.6.0
docker pull ccr.ccs.tencentyun.com/easyk8s/node:v3.7.3 
docker pull ccr.ccs.tencentyun.com/easyk8s/cni:v3.7.3 
docker pull ccr.ccs.tencentyun.com/easyk8s/kube-controllers:v3.7.3
docker pull ccr.ccs.tencentyun.com/easyk8s/cluster-proportional-autoscaler-amd64:1.6.0
docker pull ccr.ccs.tencentyun.com/easyk8s/kubernetes-dashboard-amd64:v1.10.1
docker pull ccr.ccs.tencentyun.com/easyk8s/etcd:v3.3.10
docker pull ccr.ccs.tencentyun.com/easyk8s/pause:3.1
docker pull ccr.ccs.tencentyun.com/easyk8s/pause-amd64:3.1 

工具

包含K8s安裝及使用所需的:kubelet、kubectl、kubeadm、calicoctl、cni-plugins。

下載地址如下:

# kubelet
https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/kubelet-v1.16.3-amd64

# kubectl
https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/kubectl-v1.16.3-amd64

# kubeadm
https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/kubeadm-v1.16.3-amd64

# cni-plugins
https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/cni-plugins-linux-amd64-v0.8.1.tgz

# calicoctl
https://k8s-1256695615.cos.ap-shanghai.myqcloud.com/v1.16.3/calicoctl

參考資料


歡迎關注公衆號 [陳一樂],一起學習,一起成長

發佈了58 篇原創文章 · 獲贊 26 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章