标签:k8s kubernetes -- ECS K8S 节点 kube
一、概述(官方建议)
集群规划 目前在创建Kubernetes集群时,存在着使用很多小规格ECS的现象,这样做有以下弊端: 小规格Woker ECS的网络资源受限。 如果一个容器基本可以占用一个小规格ECS,此ECS的剩余资源就无法利用(构建新的容器或者是恢复失败的容器),在小规格ECS较多的情况下,存在资源浪费。 使用大规格ECS的优势: 网络带宽大,对于大带宽类的应用,资源利用率高。 容器在一台ECS内建立通信的比例增大,减少网络传输。 拉取镜像的效率更高。因为镜像只需要拉取一次就可以被多个容器使用。而对于小规格的ECS拉取镜像的次数就会增多,若需要联动ECS伸缩集群,则需要花费更多的时间,反而达不到立即响应的目的。选择Master节点规格
通过容器服务创建的Kubernetes集群,Master节点上运行着etcd、kube-apiserver、kube-controller等核心组件,对于Kubernetes集群的稳定性有着至关重要的影响,对于生产环境的集群,必须慎重选择Master规格。Master规格跟集群规模有关,集群规模越大,所需要的Master规格也越高。 说明 您可从多个角度衡量集群规模,例如节点数量、Pod数量、部署频率、访问量。这里简单的认为集群规模就是集群里的节点数量。 对于常见的集群规模,可以参见如下的方式选择Master节点的规格(对于测试环境,规格可以小一些。下面的选择能尽量保证Master负载维持在一个较低的水平上)。节点规模 | Master规格 |
1~5个节点 | 4核8 GB(不建议2核4 GB) |
6~20个节点 | 4核16 GB |
21~100个节点 | 8核32 GB |
100~200个节点 | 16核64 GB |
选择Worker节点规格
ECS规格要求:CPU大于等于4核,且内存大于等于8 GiB。 确定整个集群的日常使用的总核数以及可用度的容忍度。 例如:集群总的核数有160核,可以容忍10%的错误。那么最小选择10台16核ECS,并且高峰运行的负荷不要超过160*90%=144核。如果容忍度是20%,那么最小选择5台32核ECS,并且高峰运行的负荷不要超过160*80%=128核。这样就算有一台ECS出现故障,剩余ECS仍可以支持现有业务正常运行。 确定CPU:Memory比例。对于使用内存比较多的应用例如Java类应用,建议考虑使用1:8的机型。此次项目资源分配(数据库、中间件、镜像仓库Harbor除外):(在原有的开发测试服务器上搭建)
序号 | IP | CPU(核) | 内存(GB) | 磁盘(GB) | 部署应用 | 备注说明 |
1 | 172.18.215.10 | 2 | 8 | 60 | k8s master[1] | kube-apiserver SLB内网负载均衡 172.18.215.23 |
2 | 172.18.215.15 | 2 | 4 | 100 | k8s master[2] | |
3 | 172.18.215.11 | 2 | 8 | 100 | k8s worker[1] | nginx-ingress SLB公网负载均衡 120.78.145.173 |
4 | 172.18.215.16 | 2 | 4 | 100 | k8s worker[2] | |
5 | 172.18.215.12 | 2 | 8 | 100 | k8s haproxy1 | kube-apiserver SLB内网负载均衡 172.18.215.23 |
6 | 172.18.215.133 | 2 | 8 | 100 | k8s haproxy2 |
在所有节点安装vim docker_install.sh #/bin/bash curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce [ ! -d /etc/docker ] && mkdir /etc/docker [ ! -d /data/docker ] && mkdir -p /data/docker cat > /etc/docker/daemon.json <<- EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "data-root": "/data/docker", "max-concurrent-downloads": 5, "storage-driver": "overlay2", "registry-mirrors": [ "https://pf5f57i3.mirror.aliyuncs.com", "http://harbor.xhyun.vip:81" ] } EOF systemctl enable --now docker bash docker_install.sh
3.2 安装软件
在所有节点安装cat >> /etc/yum.repos.d/kubernetes.repo << EOF [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 EOF yum install -y kubeadm-1.18.10-0 kubelet-1.18.10-0 kubectl-1.18.10-0 ipvsadm
可用 yum list --showduplicates|egrep kubeadm 查看有哪些可用版本设置开机启动kubelet # systemctl enable kubelet 2.3 安装负载均衡
在所有Master节点操作Kubernetes master 节点运行如下组件: - kube-apiserver - kube-scheduler - kube-controller-manager 由于阿里云的VIP需要申请havip,暂且使用阿里云的SLB,所以不需要keepalived
在所有k8s-haproxy节点操作(方案二)Haproxy mkdir -p /data/k8s/haproxy-etc vim /data/k8s/haproxy-etc/haproxy.cfg globaz daemon maxconn 65535 defaults mode http timeout connect 5000ms timeout client 5000ms timeout server 5000ms listen stats mode http bind 0.0.0.0:8442 stats enable log global stats uri /haproxy-status stats auth haadmin:123456 listen k8s-control-plane bind 0.0.0.0:8443 mode tcp log global balance roundrobin option tcplog server dev 172.18.215.10:6333 check weight 1 maxconn 2000 server devmaster2 172.18.215.15:6333 check weight 1 maxconn 2000 docker run -d \ --name k8s-haproxy \ --restart=unless-stopped \ --net=host \cd -v /data/k8s/haproxy-etc:/usr/local/etc/haproxy:ro \ haproxy:2.4.1-alpine
3.4 初始化master1
任选一台master节点,修改当前master节点 /etc/hosts,把 k8sapi 对应解析地址修改为当前节点地址(系统初始化时我们统一配置成slb负载地址了)。 对于四层监听的后端服务器无法访问私网SLB问题,是由于目前负载均衡不支持同时作为客户端和服务端,因为SLB tcp协议监听,是直接转发客户端IP和连接给后端ECS,当后端ECS连接SLB端口,SLB转发该连接时,后端ECS“看到”数据包是来自自己的IP,回包就不会回给SLB了,无法正常建立连接,所以telnet会不通。 而ECS可以telnet 公网SLB端口,是因为使用的是ECS的公网IP,VPC ECS的公网IP是在网络层映射到ECS的内网IP上的,ECS内部并没有该公网IP,所以可以telnet通公网SLB的端口 注意:因为是正式环境,我们尽量修改一些默认值,比如:token、apiserver端口、etcd数据路径、podip网段等。- 在 Master1上创建初始化配置文件
- 根据实际环境修改初始化配置文件
- 初始化 Master1
在所有Master节点操作# 根据初始化日志提示,执行kubeadm join命令加入其他管理节点。 kubeadm join k8s-vip:6333 --token token0.123456789kubeadm \ --discovery-token-ca-cert-hash sha256:56d53268517... \ --experimental-control-plane --certificate-key c4d1525b6cce4.... 修改新加入master节点apiserver端口,以及补全阿里云SLB apiserver负载地址。 # 修改kube-apiserver监听端口 sed -i 's/6443/6333/g' /etc/kubernetes/manifests/kube-apiserver.yaml # 重启kube-apiserver容器 docker restart `docker ps | grep k8s_kube-apiserver | awk '{print $1}'` # 查看kube-apiserver监听端口 ss -anp | grep "apiserver" | grep 'LISTEN' 3.6加入worker节点
在所有Worker节点操作# 根据初始化日志提示,执行kubeadm join命令加入其他工作节点。 kubeadm join k8s-vip:6333 --token token0.123456789kubeadm \ --discovery-token-ca-cert-hash sha256:260796226d………… 注意:token有效期为24小时,失效后请在主节点使用以下命令重新生成 kubeadm token create --print-join-command 3.7部署kubectl
在所有需要的节点操作mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config # kubectl 补全 重新打开终端生效 yum -y install bash-completion && cd ~;echo "source <(kubectl completion bash)" >> .bashrc 3.7部署网络插件
在Master1节点操作
- calico网络插件
- 检查集群部署情况
4.1安装dashboard/kuboard
- 部署dashboard
-
部署kuboard
4.2部署七层路由Ingress
1、 首先下载yaml文件 wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.43.0/deploy/static/provider/baremetal/deploy.yaml 2、编辑对应文件修改镜像源(国外镜像地址无法下载修改为阿里源) image: registry.cn-hangzhou.aliyuncs.com/bin_x/nginx-ingress:v0.43.0@sha256:80359bdf124d49264fabf136d2aecadac729b54f16618162194356d3c78ce2fe 本文转载自:https://www.cnblogs.com/user-sunli/p/15236808.html标签:k8s,kubernetes,--,ECS,K8S,节点,kube 来源: https://www.cnblogs.com/Xinenhui/p/15260613.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。