首頁>技術>

本文將詳細介紹在阿里雲平臺上,使用terway網路的ENI多IP模式,自建一個kubernetes叢集的完整過程。包括在阿里雲上建立vpc、建立對應例項ECS,安裝docker、kubernetes環境,安裝terway網路外掛,執行pod的完整過程。

建立過程中使用到的資源及其版本:

centos: 7.8

docker: 19.03.5

kubernetes: 19.03.5

terway: v1.0.10.122

阿里雲產品:

一個vpc,兩個交換機,兩個企業安全組,RAM許可權管理

1、建立vpc及交換機及企業級安全組

1)如圖1,在阿里雲平臺上建立一個10.0.0.0/8網段的vpc。

圖1 vpc示例

2)如圖2,在上面建立的vpc中建立兩個交換機,pod交換機(10.0.0.0/24)給叢集中pod使用,node交換機(10.0.1.0/24)給node節點及其他使用。

注:生產環境中,建議建立4個交換機,2個pod交換機和2個node交換機,實現高可用;

pod交換機設定的網段建議設定大一些

圖2 交換機示例

3) 建立企業級安全組

如圖3,建立node使用的企業級安全組。

圖3 node企業級安全組

如圖4,建立pod使用的企業級安全組。

圖4 pod企業級安全組

2、建立阿里雲實例

建立三臺阿里雲實例,一臺為master,兩臺為node節點,構成一個kubernetes叢集。

master00: 10.0.0.187

node00:10.0.0.188

node01:10.0.0.189

注:阿里雲實例建議選網路最佳化型,主要看例項的彈性網絡卡數量以及單塊彈性網絡卡的私有IP數量

能建立的pod個數=(彈性網絡卡數量-主網絡卡數量)* 單塊彈性網絡卡的私有IP數量

參考:https://help.aliyun.com/document_detail/108490.html?spm=a2c4g.11186623.6.604.27b51e51vet94k#section-ijd-dkf-hht

3、搭建叢集

1)安裝kubernetes

將下面內容寫入/etc/yum.repo.d/kubernetes.repo檔案中

[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

繼續執行以下命令

yum makecacheyum list kubeadm --showduplicates | sort -r          #檢視所有kubeadm版本yum install kubectl-1.18.6-0.x86_64 kubelet-1.18.6-0.x86_64 kubeadm-1.18.6-0.x86_64  安裝對應版本rpm -qa |grep kube    檢視安裝的版本systemctl enable kubelet 注:最好不要安裝最新版本的

說明:

kubelet 執行在叢集所有節點上,用於啟動Pod和容器等物件的工具kubeadm 用於初始化叢集,啟動叢集的命令工具kubectl 用於和叢集通訊的命令列,透過kubectl可以部署和管理應用,檢視各種資源,建立、刪除和更新各種元件

2)安裝docker

yum install -y yum-utilsyum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum list docker-ce --showduplicates|sort -ryum install docker-ce-cli-19.03.5 -yyum install docker-ce-19.03.5 -ysystemctl enable docker 

3)啟動kubernetes叢集

1)修改hosts

cat >> /etc/hosts << EOF10.0.0.187    master0010.0.0.188   node0010.0.0.189   node01EOF

2)禁用swap

sed -i '/swap/s/^/#/' /etc/fstab        #永久關閉swap   

3) 啟動docker

systemctl start docker 

4) 安裝命令補全

yum -y install bash-completion     #安裝bash-completionsource /etc/profile.d/bash_completion.sh     #載入bash-completion

5) 啟動kubernetes

配置kubernetes啟動配置檔案config.yaml

cat >> /root/config.yaml << EOFapiVersion: kubeadm.k8s.io/v1beta2kind: ClusterConfigurationkubernetesVersion: 1.18.6imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containerscontrolPlaneEndpoint: "ali-k8s.cici.com:6443"networking:  serviceSubnet: "172.21.0.0/20"  podSubnet: "10.0.1.0/24"  dnsDomain: "cluster.local"EOF

說明:

kubernetesVersion: 與kubeadm版本相同imageRepository: 修改映象地址controlPlaneEndpoint:若使用域名,需加解析serviceSubnet:必須為172.21.0.0/20podSubnet:pod網段,為在vpc建立的pod交換機的網段

啟動kubeadm

kubeadm init --config=/root/config.yaml --upload-certs

圖5 kubeadm啟動過程

上條命令執行後,執行圖5中的三條命令

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

檢視pod狀態

圖6 pod狀態

說明:coredns仍為pending狀態,在等待安裝網路外掛

4、安裝terway網路外掛(ENI多IP模式)

a: 新增RAM授權

圖7 許可權策略

如圖8,新建自定義許可權策略,策略名稱自定義即可,選擇“指令碼配置”,匯入授權內容

圖8 自定義許可權策略

匯入以下授權內容,terway網路外掛gitub地址:https://github.com/AliyunContainerService/terway

{  "Version": "1",  "Statement": [{      "Action": [        "ecs:CreateNetworkInterface",        "ecs:DescribeNetworkInterfaces",        "ecs:AttachNetworkInterface",        "ecs:DetachNetworkInterface",        "ecs:DeleteNetworkInterface",        "ecs:DescribeInstanceAttribute",        "ecs:DescribeInstanceTypes",        "ecs:AssignPrivateIpAddresses",        "ecs:UnassignPrivateIpAddresses",        "ecs:DescribeInstances"      ],      "Resource": [        "*"      ],      "Effect": "Allow"    },    {      "Action": [        "vpc:DescribeVSwitches"      ],      "Resource": [        "*"      ],      "Effect": "Allow"    }  ]}

如圖9和圖10,點選“RAM角色管理”,再點選“建立RAM角色”

圖9 建立RAM角色管理1

圖10 建立RAM角色管理2

圖11 建立使用者2

圖12 使用者授權

建立完使用者,儲存accessid及accesskey。

b: 在master00機器上修改terway-multiip.yml配置檔案

從terway的github地址中下載terway-multiip.yml檔案,vim開啟,修改以下內容。

  eni_conf: |    {      "version": "1",      "access_key": "LTAI4G1nd2WCKGqxxxxxxxxx",      "access_secret": "0Q5ucAIlcSkQNryrBTsJGxxxxxxxxx",      "security_group": "sg-2ze52xbcwx5gytpb4g48",      "service_cidr": "172.21.0.0/20",      "vswitches": {        "cn-beijing-g": ["vsw-2zex462fejdtk902i7i74"]      },      "max_pool_size": 5,      "min_pool_size": 0    }

開啟terway-multiip.yml檔案,將DaemonSet的apiVersion由extensions/v1beta1修改為apps/v1

#apiVersion: extensions/v1beta1apiVersion: apps/v1kind: DaemonSet

再對DaemonSet新增selector配置,如圖15所示

  selector:    matchLabels:      app: terway

圖15 DaemonSet配置

若無上述針對DaemonSet配置的修改,將出現以下兩個錯誤

error: unable to recognize "terway-multiip.yml": no matches for kind "DaemonSet" in version "extensions/v1beta1"

error: error validating "terway-multiip.yml": error validating data: ValidationError(DaemonSet.spec): missing required field "selector" in io.k8s.api.apps.v1.DaemonSetSpec; if you choose to ignore these errors, turn validation off with --validate=false

安裝terway網路外掛

kubectl apply -f terway-multiip.yml

檢視kubernetes叢集pod狀態,如圖16

kubectl get pods -A

5、新增node節點

在master00節點上執行以下命令

kubeadm token create --print-join-command

將會生成一條命令,放到node節點上執行,即可將node節點加入到叢集中

kubeadm join ali-k8s.cici.com:6443 --token 8xrhvk.5clbyisk92yvaol3     --discovery-token-ca-cert-hash sha256:d4c1a51d5e1fef359230c00a97f4d9d26283bd3e5de9da26c1808549128dc9e6

注:node節點需能解析該域名ali-k8s.cici.com

如圖17和圖18,在master節點中檢視master和node節點狀態,以為各pod狀態

圖17 node狀態

圖18 pod狀態

6、建立示例pod

新增一個nginx.yml檔案,建立兩個nginx pod,內容如下:

apiVersion: apps/v1kind: Deploymentmetadata:  name: nginxspec:  selector:    matchLabels:      app: nginx  replicas: 2  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx        imagePullPolicy: IfNotPresent        ports:        - name: http          containerPort: 80

執行apply命令:

kubectl apply -f nginx.yml

如圖19,檢視nginx pod狀態

圖19 nginx pod狀態

生成的兩個nginx pod正常執行,也分配了IP,在阿里雲控制檯的“彈性網絡卡”中,也能看到生成了對應的輔助網絡卡。

圖20 阿里雲彈性網絡卡

建立kubernetes叢集完成。

17
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Python 入門系列——6. 資料型別