首页 > 其他分享 >高可用的kubernetes集群安装

高可用的kubernetes集群安装

时间:2023-03-14 17:22:29浏览次数:54  
标签:0.115 kubernetes -- 集群 etcd master 10.10 kubeadm 安装

一、架构设计

二、集群规划

  IP 集群角色 描述
1 10.10.0.115 keepalived 虚拟IP 虚拟IP, 对10.10.0.15、10.10.0.29做keep alived
1 10.10.0.15 master、etcd、haproxy、keepalived真实ip  
2 10.10.0.29 master、etcd、keepalived真实ip  
3 10.10.0.34 master、etcd  

三、具体方案实现描述

选取三台机器: 10.10.0.15, 10.10.0.29, 10.10.0.34,分别位于机房不同的机架上,这三台机器用于部署 kubernetes 的master。

为了实现高可用,使用 keepalived 作为HA主从切换, keepalived VRRP ip: 10.10.0.115, 真实IP: 10.10.0.15,(主), 10.10.0.29(备)

使用 haproxy 做负载均衡, haproxy 绑定到10.10.0.115:8443, 由并负载均衡到 10.10.0.15:6443, 10.10.0.29:6443, 10.10.0.34:6443。

四、etcd集群安装

参考:ETCD集群安装

五、安装keepalived

注意: virtual_router_id  一定要唯一。而且 vip  10.10.0.115 不要跟同网段上的ip冲突。

在10.10.0.29  上同样配置 /etc/keepalived/keepalived.conf , 修改响应的配置, unicast_src_ip与unicast_peer交换。 注意 为了让 10.10.0.15作为主,需要降低 10.10.0.29 的priority ,即比 10.10.0.15 中的 100 要少。

六、haproxy安装

参数解析:

  •  bind  绑定到 虚 IP  10.10.0.15,端口为 8443
  • haproxy做负载均衡,把来自 请求10.10.0.115:8443 的流量转发到 10.10.0.15:6443,10.10.0.29, 10.10.0.34 三台master的api server

七、kubernetes 集群安装

1、前面工作

       参考 使用kubeadm在centos 7.2上安装kubernetes v1.15.0

       做到 kubeadm init 以前的步骤。

2、使用配置文件安装第一个master

用前面单master集群安装不同的是,我们用  kubeadm init --config kubeadm-config.yaml --upload-certs 指定配置文件来安装,其kubeadm-config.yaml的内容如下:

apiVersion: kubeadm.k8s.io/v1beta2 bootstrapTokens: - groups:   - system:bootstrappers:kubeadm:default-node-token   token: abcdef.0123456789abcdef   ttl: 24h0m0s   usages:   - signing   - authentication kind: InitConfiguration localAPIEndpoint:   advertiseAddress: 10.10.0.15   bindPort: 6443 nodeRegistration:   criSocket: /var/run/dockershim.sock   name: yizhuang-10-10-0-15   taints:   - effect: NoSchedule     key: node-role.kubernetes.io/master   --- apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration kubernetesVersion: stable # controlPlaneEndpoint 用keepalived 生成的虚ip controlPlaneEndpoint: "10.10.0.115:8443" etcd:   external:      endpoints:      - https://10.10.0.15:2379      - https://10.10.0.29:2379      - https://10.10.0.34:2379      caFile: /etc/kubernetes/pki/etcd/ca.pem      certFile: /etc/kubernetes/pki/etcd/client.pem      keyFile: /etc/kubernetes/pki/etcd/client-key.pem

配置文件解析:

  • controlPlaneEndpoint:使用了虚IP:10.10.0.115, 且假定其端口为 8443
  • 外部etcd 配置为  10.10.0.15, 10.10.0.29, 10.10.0.34,用client auth 证书,用于访问etcd 集群
  • 注意:nodeRegistration中name应该为机器的hostname
  • 在InitConfiguration 中指定 advertiseAddress 为第一个 master 节点 10.10.0.15

执行命令行:

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

执行成功后,可得到以下信息:

kubeadm join 10.10.0.115:8443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:3c67b2dad479675486b2580022eb11f39be932405b4de6d338a6eb268d24e59c \
--control-plane --certificate-key 71f80e4fffc2a3b7d2e6117f03ecfee26207d7022d85fac95fb6946b8de387a0 --apiserver-advertise-address 10.10.0.115

kubeadm join 10.10.0.115:8443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:3c67b2dad479675486b2580022eb11f39be932405b4de6d338a6eb268d24e59c --apiserver-advertise-address 10.10.0.115

 恭喜客户端第一个master 节点安装成功了

3、join 另外两个master

在另外两个master 分别安装 dokcer, kubeadm, kubectl ,kubelet, 然后执行 kubeadm join

kubeadm join 10.10.0.115:8443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:3c67b2dad479675486b2580022eb11f39be932405b4de6d338a6eb268d24e59c \ --control-plane --certificate-key 71f80e4fffc2a3b7d2e6117f03ecfee26207d7022d85fac95fb6946b8de387a0 --apiserver-advertise-address 10.10.0.115

参数解析

  • --control-plane 参数, 表明加入集群的是  master  节点, 
  •  --certificate-key 71f80e4fffc2a3b7d2e6117f03ecfee26207d7022d85fac95fb6946b8de387a0 参数与之前的 --upload-certs参数对应, 用于自动把第一个master生成的证书上传到 join节点
  • --apiserver-advertise-address, 指定为 init 中的 controlPlaneEndpoint 中的虚ip. 注意,千万不要把apiserver-advertise-address 设置为第1个 master

4、join 其他的node节点

在其他节点 分别安装 dokcer, kubeadm, kubectl ,kubelet, 然后执行 kubeadm join

kubeadm join 10.10.0.115:8443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:3c67b2dad479675486b2580022eb11f39be932405b4de6d338a6eb268d24e59c --apiserver-advertise-address 10.10.0.115

参数解析:

  • 与master 不同的是没有,join node 节点时不需要 指定  --control-plane --certificate-key

5、网络安装

  • 准备calica-etcd.yaml, 可以从官方下载

    curl https://docs.projectcalico.org/v3.10/manifests/calico-etcd.yaml -o calico.yaml

  • 修改ConfigMap对象  中的 endPoints, etcd_ca, etcd_cert, etcd_key
    其中  etcd_endpoints的value修改为: "https://10.10.0.15:2379,https://10.10.0.29:2379,https://10.10.0.34:2379"

    etcd_cert的value修改为 "/calico-secrets/etcd-cert"
    etcd_key的value修改为"/calico-secrets/etcd-key"

    etcd_ca的value修改为"/calico-secrets/etcd-ca"

  • 修改Secret对象
    首先,把 etcd-key, etcd-cert, etcd-ca 等配置的注释去掉
     分别用  cat /etc/etcd/certs/client-key.pem | base64 -w 0,   cat /etc/etcd/certs/client.pem | base64 -w 0,  cat /etc/etcd/certs/ca.pem | base64 -w 0 生成三个字符串,并分别作为 etcd-key, etcd-cert, etcd-c的值
  • 修改Daemonset 对象,

    关闭CALICO_IPV4POOL_IPIP,把"always"修改为“off” ,实质是打开 bgp

    设定IP池,

    如果有多个网卡,指定网卡

  • 执行 kubectl create -f calico.yaml

  • 配置calico节点
    参考 calico bgp安装与配置

八、踩过的坑

1、 如果直接参考 k8s 的官方文档,用 kubeadm init --config kuebadm-config.yaml --upload-certs  安装,会提示

W1229 10:09:01.789627 63389 common.go:140] WARNING: could not obtain a bind address for the API Server: no default routes found in "/proc/net/route" or "/proc/net/ipv6_route"; using: 0.0.0.0
W1229 10:09:03.790859 63389 version.go:98] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable.txt": Get https://dl.k8s.io/release/stable.txt: dial tcp 35.201.71.162:443: connect: network is unreachable
W1229 10:09:03.790936 63389 version.go:99] falling back to the local client version: v1.15.4
cannot use "0.0.0.0" as the bind address for the API Server

解决办法:从错误提示上看说是无法把api server 绑定到0.0.0.0,需要指定api server 的地址。 用新的配置文件,在 kubeadm-config.yaml 中添加  InitConfiguration, 在InitConfiguration 中会指定advertiseAddress. 详细参考本文的 使用配置文件 安装 k8s 集群。

2、etcd 证书

kubernetes 集群的各个节点证书之前使用了 peer 的证书,这里会存在问题,因为peer 是需要host 授权的,在做证书的时候就已经确定host了,如果集群节点没有在host列表中,认证就会失败。所以,集群节点不能用peer证书,只能用client证书。

3、hostname

4 、join时  --apiserver-advertise-address 参数必须为: 10.10.0.115

5、calico.yaml, 当 calico 的版本设置为 v3.10.1时,  要修改  livenessProbe, readinessProbe  中的命令行 ,去掉 - -bird-ready

6、启动haproxy失败,错误信息:

haproxy Starting proxy https-apiserver: cannot bind socket

解决办法: 

vi /etc/sysctl.conf #修改内核参数 net.ipv4.ip_nonlocal_bind = 1 #没有就新增此条记录   sysctl -p #保存结果,使结果生效

 

附录、参考文档

1、https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/clustering.md (etcd集群安装)

2、https://github.com/coreos/docs/blob/master/os/generate-self-signed-certificates.md    (https证书生成)

3、https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/ (k8s官方高可用文档)

4、https://blog.51cto.com/billy98/2350660 (kubeadm安装kubernetes 1.13.2多master高可用集群)

5、Haproxy启动故障:Starting proxy:cannot bind socket

标签:0.115,kubernetes,--,集群,etcd,master,10.10,kubeadm,安装
From: https://www.cnblogs.com/tz2011/p/17215650.html

相关文章

  • 如何安装linux操作系统?
    1、直接把笔记本的windows干掉,单独安装linux系统(初学者对于学习liunx使用还是较苦难)可以选择安装双系统(你的笔记本可以同时安装两个操作系统,开机时可以选择windows,linux......
  • 最新HCL AppScan Standard 10.1.028223 安装及 许可证注册
    最新HCLAppScanStandard10.1.028223安装及许可证注册参考原文:《最新HCLAppScanStandard10.1.028223》1、软件介绍1.1、旧版界面1.2、新版本界面1.3:介绍HCLAppS......
  • ELK安装及简单使用
    一、Elasticsearch集群1.1内核参数优化:#vim/etc/sysctl.confvm.max_map_count=2621441.2:主机名解析192.168.84.132es1es1.example.com192.168.84.133es2es......
  • REHL 8安装docker
    1.卸载旧版本docker,包括rehl自带的podmansudoyumremovedocker\docker-client\docker-client-latest\docke......
  • 腾讯云服务器安装完jdk,tomcat,无法访问的问题
    jdk8,tomcat11,控制台防火墙规则已添加该端口系统内firewall已添加开放该端口启动tomcat初步看顺利启动,后经过catalina.sh发现每次启动后都出错了,网上搜索可能是jdk8与t......
  • 安装electron失败解决办法
    pnpminstallelectron后,进入postinstall安装后,ctrl终止进程进入Releases·electron/electron(github.com) 页面下载对应平台zip包:如window下载electro......
  • Ubuntu22.10 使用命令安装 MongoDB6.0 并配置
     安装mongodbapt-getinstallgnupgwget-qO-https://www.mongodb.org/static/pgp/server-6.0.asc|apt-keyadd-echo"deb[arch=amd64,arm64]https://repo......
  • linux 安装nodejs
    https://www.cnblogs.com/veezeng/p/11164066.htmlhttps://nodejs.org/dist/......
  • 麒麟V10安装dm8数据库
    1.操作系统银河麒麟V10[root@Kylin-V10-x86-64dm8]#mountdm8_20230104_x86_rh6_64.iso/mnt/mount:/mnt:WARNING:sourcewrite-protected,mountedread-only.[......
  • DataX 安装&体验
    第二章 安装&体验2.1官方地址下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz源码地址:https://github.com/alibaba/DataX2.2前置要求L......