资讯专栏INFORMATION COLUMN

Kubernetes集群生产环境搭建全过程

everfight / 1923人阅读

摘要:本文详细讲解如何搭建高可用的集群,以下简称由三台服务器组成集群命名为,,,用来代替集群搭建首先搭建集群为集群的核心组成部分,负责所有集群配置信息和服务信息的存储,所以必须要保证高可用,此处采用的静态服务发现,即在启动的时候,确定的。

本文详细讲解如何搭建高可用的Kubernetes集群,以下简称k8s

由三台服务器(CentOS 7.0)组成master集群,命名为m1,m2,m3,ip用m1 m2 m3来代替

etcd集群搭建

首先搭建etcd集群,etcd为k8s集群的核心组成部分,负责所有集群配置信息和服务信息的存储,所以必须要保证高可用,此处采用etcd的静态服务发现,即在etcd启动的时候,确定etcd node的ip。

yum安装etcd yum install -y etcd

分别在三台机器启动etcd进程(实际操作中需要将m1 m2 m3替换成实际的ip地址)
m1:

</>复制代码

  1. etcd -name infra1 -initial-advertise-peer-urls http://m1:2380 -listen-peer-urls http://m1:2380 -listen-client-urls http://m1:2379,http://127.0.0.1:2379 -advertise-client-urls http://m1:2379 -initial-cluster-token etcd-cluster-1 -initial-cluster infra1=http://m1:2380,infra2=http://m2:2380,infra3=http://m3:2380 -initial-cluster-state new

m2:

</>复制代码

  1. etcd -name infra2 -initial-advertise-peer-urls http://m2:2380 -listen-peer-urls http://m2:2380 -listen-client-urls http://m2:2379,http://127.0.0.1:2379 -advertise-client-urls http://m2:2379 -initial-cluster-token etcd-cluster-1 -initial-cluster infra1=http://m1:2380,infra2=http://m2:2380,infra3=http://m3:2380 -initial-cluster-state new

m3:

</>复制代码

  1. etcd -name infra3 -initial-advertise-peer-urls http://m3:2380 -listen-peer-urls http://m3:2380 -listen-client-urls http://m3:2379,http://127.0.0.1:2379 -advertise-client-urls http://m3:2379 -initial-cluster-token etcd-cluster-1 -initial-cluster infra1=http://m1:2380,infra2=http://m2:2380,infra3=http://m3:2380 -initial-cluster-state new

集群启动后,选取一台机器执行 etcdctl cluster-health

如果出现3个类似 member cbfa6350b369c3a is healthy 的字样,说明etcd集群部署成功。

实战中采取了systemd来进行管理
新建文件 /usr/lib/systemd/system/etcd.service
内容如下:

</>复制代码

  1. [Unit]
  2. Description=Etcd Server
  3. After=network.target
  4. After=network-online.target
  5. Wants=network-online.target
  6. [Service]
  7. Type=notify
  8. WorkingDirectory=/root
  9. ExecStart=etcd -name infra1 -initial-advertise-peer-urls http://m1:2380 -listen-peer-urls http://m1:2380 -listen-client-urls http://m1:2379,http://127.0.0.1:2379 -advertise-client-urls http://m1:2379 -initial-cluster-token etcd-cluster-1 -initial-cluster infra1=http://m1:2380,infra2=http://m2:2380,infra3=http://m3:2380 -initial-cluster-state new
  10. Restart=on-failure
  11. LimitNOFILE=65536
  12. [Install]
  13. WantedBy=multi-user.target

这样可以使用 systemctl start etcd来启动服务

Kubernete master搭建

master搭建是通过自动化搭建脚本实现的 脚本内容如下

</>复制代码

  1. #!/bin/bash
  2. echo "################ Prerequisites..."
  3. systemctl stop firewalld
  4. systemctl disable firewalld
  5. yum -y install ntp
  6. systemctl start ntpd
  7. systemctl enable ntpd
  8. echo "################ Installing flannel..."
  9. #安装flannel
  10. yum install flannel -y
  11. echo "################ Add subnets for flannel..."
  12. A_SUBNET=172.17.0.0/16
  13. B_SUBNET=192.168.0.0/16
  14. C_SUBNET=10.254.0.0/16
  15. FLANNEL_SUBNET=$A_SUBNET
  16. SERVICE_SUBNET=$B_SUBNET
  17. OCCUPIED_IPs=(`ifconfig -a | grep "inet " | cut -d ":" -f 2 |cut -d " " -f 1 | grep -v "^127"`)
  18. for ip in ${OCCUPIED_IPs[@]};do
  19. if [ $(ipcalc -n $ip/${A_SUBNET#*/}) == $(ipcalc -n ${A_SUBNET}) ];then
  20. FLANNEL_SUBNET=$C_SUBNET
  21. SERVICE_SUBNET=$B_SUBNET
  22. break
  23. fi
  24. if [ $(ipcalc -n $ip/${B_SUBNET#*/}) == $(ipcalc -n ${B_SUBNET}) ];then
  25. FLANNEL_SUBNET=$A_SUBNET
  26. SERVICE_SUBNET=$C_SUBNET
  27. break
  28. fi
  29. if [ $(ipcalc -n $ip/${C_SUBNET#*/}) == $(ipcalc -n ${C_SUBNET}) ];then
  30. FLANNEL_SUBNET=$A_SUBNET
  31. SERVICE_SUBNET=$B_SUBNET
  32. break
  33. fi
  34. done
  35. while ((1));do
  36. sleep 2
  37. etcdctl cluster-health
  38. flag=$?
  39. if [ $flag == 0 ];then
  40. etcdctl mk /coreos.com/network/config "{"Network":""${FLANNEL_SUBNET}""}"
  41. break
  42. fi
  43. done
  44. echo "################ Starting flannel..."
  45. #此处将m1 m2 m3 换成实际的ip
  46. echo -e "FLANNEL_ETCD="http://m1:2379,http://m2:2379,http://m3:2379"
  47. FLANNEL_ETCD_KEY="/coreos.com/network"" > /etc/sysconfig/flanneld
  48. systemctl enable flanneld
  49. systemctl start flanneld
  50. echo "################ Installing K8S..."
  51. yum -y install kubernetes
  52. echo "KUBE_API_ADDRESS="--address=0.0.0.0"
  53. KUBE_API_PORT="--port=8080"
  54. KUBELET_PORT="--kubelet_port=10250"
  55. KUBE_ETCD_SERVERS="--etcd_servers=http://m1:2379,http://m2:2379,http://m3:2379"
  56. KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range="${SERVICE_SUBNET}""
  57. KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
  58. KUBE_API_ARGS=""" > /etc/kubernetes/apiserver
  59. echo "################ Start K8S components..."
  60. for SERVICES in kube-apiserver kube-controller-manager kube-scheduler; do
  61. systemctl restart $SERVICES
  62. systemctl enable $SERVICES
  63. systemctl status $SERVICES
  64. done
Kubernete node搭建

node的搭建也是通过自动化部署脚本实现的,脚本内容如下:

</>复制代码

  1. #!/bin/bash
  2. echo "################ Prerequisites..."
  3. #关闭firewall 开启ntp时间同步
  4. systemctl stop firewalld
  5. systemctl disable firewalld
  6. yum -y install ntp
  7. systemctl start ntpd
  8. systemctl enable ntpd
  9. #安装kubernetes所需要的几个软件
  10. yum -y install kubernetes docker flannel bridge-utils
  11. #此处使用了一个vip 命名为vip 实际部署时需要替换为你的集群的vip 使用此ip的服务有 kube-master(8080) registry(5000) skydns(53)
  12. echo "################ Configuring nodes..."
  13. echo "################ Configuring nodes > Find Kube master..."
  14. KUBE_REGISTRY_IP="vip"
  15. KUBE_MASTER_IP="vip"
  16. echo "################ Configuring nodes > Configuring Minion..."
  17. echo -e "KUBE_LOGTOSTDERR="--logtostderr=true"
  18. KUBE_LOG_LEVEL="--v=0"
  19. KUBE_ALLOW_PRIV="--allow_privileged=false"
  20. KUBE_MASTER="--master=http://${KUBE_MASTER_IP}:8080"" > /etc/kubernetes/config
  21. echo "################ Configuring nodes > Configuring kubelet..."
  22. #取每个node机器的eth0的ip作为标识
  23. KUBE_NODE_IP=`ifconfig eth0 | grep "inet " | awk "{print $2}"`
  24. #api_servers 使用master1 master2 master3的ip数组形式
  25. echo -e "KUBELET_ADDRESS="--address=0.0.0.0"
  26. KUBELET_PORT="--port=10250"
  27. KUBELET_HOSTNAME="--hostname_override=${KUBE_NODE_IP}"
  28. KUBELET_API_SERVER="--api_servers=http://m1:8080,http://m2:8080,http://m3:8080"
  29. KUBELET_ARGS="--cluster-dns=vip --cluster-domain=k8s --pod-infra-container-image=${KUBE_REGISTRY_IP}:5000/pause:latest"" > /etc/kubernetes/kubelet
  30. #flannel读取etcd配置信息 为本机的docker0分配ip 保证node集群子网互通
  31. echo "################ Configuring flannel..."
  32. echo -e "FLANNEL_ETCD="http://m1:2379,http://m2:2379,http://m3:2379"
  33. FLANNEL_ETCD_KEY="/coreos.com/network"" > /etc/sysconfig/flanneld
  34. echo "################ Accept private registry..."
  35. echo "OPTIONS="--selinux-enabled --insecure-registry ${KUBE_REGISTRY_IP}:5000"
  36. DOCKER_CERT_PATH=/etc/docker" > /etc/sysconfig/docker
  37. echo "################ Start K8S Components..."
  38. systemctl daemon-reload
  39. for SERVICES in kube-proxy flanneld; do
  40. systemctl restart $SERVICES
  41. systemctl enable $SERVICES
  42. systemctl status $SERVICES
  43. done
  44. echo "################ Resolve interface conflicts..."
  45. systemctl stop docker
  46. ifconfig docker0 down
  47. brctl delbr docker0
  48. echo "################ Accept private registry..."
  49. echo -e "OPTIONS="--selinux-enabled --insecure-registry ${KUBE_REGISTRY_IP}:5000"
  50. DOCKER_CERT_PATH=/etc/docker" > /etc/sysconfig/docker
  51. for SERVICES in docker kubelet; do
  52. systemctl restart $SERVICES
  53. systemctl enable $SERVICES
  54. systemctl status $SERVICES
  55. done

至此,Kubernetes master和node的搭建就结束了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32476.html

相关文章

  • Kubernetes集群生产环境搭建过程

    摘要:本文详细讲解如何搭建高可用的集群,以下简称由三台服务器组成集群命名为,,,用来代替集群搭建首先搭建集群为集群的核心组成部分,负责所有集群配置信息和服务信息的存储,所以必须要保证高可用,此处采用的静态服务发现,即在启动的时候,确定的。 本文详细讲解如何搭建高可用的Kubernetes集群,以下简称k8s 由三台服务器(CentOS 7.0)组成master集群,命名为m1,m2,m3,i...

    William_Sang 评论0 收藏0
  • Kubernetes集群生产环境搭建过程

    摘要:本文详细讲解如何搭建高可用的集群,以下简称由三台服务器组成集群命名为,,,用来代替集群搭建首先搭建集群为集群的核心组成部分,负责所有集群配置信息和服务信息的存储,所以必须要保证高可用,此处采用的静态服务发现,即在启动的时候,确定的。 本文详细讲解如何搭建高可用的Kubernetes集群,以下简称k8s 由三台服务器(CentOS 7.0)组成master集群,命名为m1,m2,m3,i...

    Forelax 评论0 收藏0
  • 乐心医疗的 Kubernetes云平台建设实践

    摘要:宋体自年被开源以来,很快便成为了容器编排领域的标准。宋体年月,乐心医疗的第一个生产用集群正式上线。所以于年推出后,乐心医疗的运维团队在开会讨论之后一致决定尽快迁移到。Kubernetes 自 2014 年被 Google 开源以来,很快便成为了容器编排领域的标准。因其支持自动化部署、大规模可伸缩和容器化管理等天然优势,已经被广泛接纳。但由于 Kubernetes 本身的复杂性,也让很多企业的...

    testHs 评论0 收藏0
  • Kubernetes的几种主流部署方式01-minikube部署

    摘要:代表的解决方案为。虽然官网列出的部署方式很多,但也不用被这么多种部署方式搞糊涂了。虽然只是一条命令,但其实执行了很多步骤命令执行后输出如下可以看到,主要做了这些事创建了名为的虚拟机,并在虚拟机中安装了容器运行时。 综述 Kubernetes集群的组件众多,要部署一套符合生产环境的集群不是一件容易的事。好在随着社区的快速发展,特别是在它成为事实上的容器编排标准以后,基本所有的主流云平台都...

    Lionad-Morotar 评论0 收藏0
  • Kubernetes的几种主流部署方式01-minikube部署

    摘要:代表的解决方案为。虽然官网列出的部署方式很多,但也不用被这么多种部署方式搞糊涂了。虽然只是一条命令,但其实执行了很多步骤命令执行后输出如下可以看到,主要做了这些事创建了名为的虚拟机,并在虚拟机中安装了容器运行时。 综述 Kubernetes集群的组件众多,要部署一套符合生产环境的集群不是一件容易的事。好在随着社区的快速发展,特别是在它成为事实上的容器编排标准以后,基本所有的主流云平台都...

    浠ラ箍 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<