本文将详细介绍在阿里云平台上,使用terway网络的ENI多IP模式,自建一个kubernetes集群的完整过程。包括在阿里云上创建vpc、创建对应实例ECS,安装docker、kubernetes环境,安装terway网络插件,运行pod的完整过程。

创建过程中使用到的资源及其版本:

资源版本
centos7.8
dockerdocker: 19.03.5
kubernetes19.03.5
terwayv1.0.10.122

阿里云产品:

阿里云产品个数
vpc1
交换机2
企业安全组2
RAM权限管理1

1、创建vpc及交换机及企业级安全组

1)如图1,在阿里云平台上创建一个10.0.0.0/8网段的vpc。
在这里插入图片描述

2)如图2,在上面创建的vpc中创建两个交换机,pod交换机(10.0.0.0/24)给集群中pod使用,node交换机(10.0.1.0/24)给node节点及其他使用。

注:生产环境中,建议创建4个交换机,2个pod交换机和2个node交换机,实现高可用;

pod交换机设置的网段建议设置大一些
在这里插入图片描述
3) 创建企业级安全组

如图3,创建node使用的企业级安全组。
图3 node企业安全组
如图4,创建pod使用的企业级安全组。
图4 pod企业安全组

2、创建阿里云实例

创建三台阿里云实例,一台为master,两台为node节点,构成一个kubernetes集群。

节点IP
master0010.0.0.187
node0010.0.0.188
node0110.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=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

继续执行以下命令

yum makecache
yum 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-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates|sort -r
yum install docker-ce-cli-19.03.5 -y
yum install docker-ce-19.03.5 -y
systemctl enable docker 

3)启动kubernetes集群

1)修改hosts

cat >> /etc/hosts << EOF
10.0.0.187    master00
10.0.0.188   node00
10.0.0.189   node01
EOF

2)禁用swap

sed -i '/swap/s/^/#/' /etc/fstab        #永久关闭swap 

3)启动docker

systemctl start docker 

4)安装命令补全

yum -y install bash-completion     #安装bash-completion
source /etc/profile.d/bash_completion.sh     #加载bash-completion

5)启动kubernetes
配置kubernetes启动配置文件config.yaml

cat >> /root/config.yaml << EOF
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: 1.18.6
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
controlPlaneEndpoint: "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/20
podSubnet:pod网段,为在vpc创建的pod交换机的网段

启动kubeadm

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

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,在阿里云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和图12,点击“用户”,点击“创建用户”,并为该用户授权

图11 创建用户
图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/v1beta1
apiVersion: apps/v1
kind: 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状态

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/v1
kind: Deployment
metadata:
  name: nginx
spec:
  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集群完成。

Logo

开源、云原生的融合云平台

更多推荐