关注分享主机优惠活动
国内外VPS云服务器

kubeadm部署k8s1.9高可用集群--4并部署master节点(k8s集群至少有多个节点)

摘要:节点部署节点中包含的组件。 本文档介绍了部署名为“在每个主机上安装”的三节点高可用性集群的步骤。 出现以下错误的解决方法:增大启动参数。 在物理机上,增大参数可能不会出现这个问题。 至此,您就拥有了一个完整的高可用性集群。

部署主节点

kubernetes主节点包含的组件:

kube-apiserver

kube-scheduler

kube-controller-manager

本文档部署一个名为 k8s-主机1,k8s-主机2k8s-主机3

k8s[ k4]host1 : 172.16.120.154

k8s-host2: 172.16.120.155

k8s-host3: 172.16.120.156

安装docker 安装Docker在每个主机上。 我们建议使用 docker v1.12,但 v1.11、v1.13 和 17.03 也可以使用。 17.06及以上版本可能可以工作,但尚未经过k8s团队测试。
补充说明:kubelet 配置的 cgroup 驱动程序必须与 Docker 配置的 cgroup 驱动程序匹配。 这统一为systemd。

yum install -y dockersystemctl enable docker && systemctl start docker

安装 kubeadm、kubelet、kubectl

cat < /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=1gpgkey= https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpgEOFsetenforce 0yum install -y kubelet kubeadm kubectlsystemctl enable kubelet && systemctl start kubelet

运行命令 setenforce 0 禁用 selinux。 这主要是为了允许容器访问主机文件系统和 Pod 网络。

一些 RHEL/CentOS 7 用户报告了由于 iptables 被绕过而导致流量错误路由的问题。 因此,您需要运行以下命令:

cat < /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net 。   Bridge.bridge -nf-call-iptables = 1EOFsysctl --system

安装master>kubeadm init

kubeadm init --apiserver-advertise-address=172.16.120.200 --pod-network-cidr= 192.168.0.0/16

apiserver-advertise-address 该参数在haproxy+keepalived中一般指定为vip。

pod-network-cidr 主要需要在构建 pod 网络(calico)时在 init 时指定。

我收到以下错误:

[root@k8s-node04 ~]# kubeadm init --apiserver-advertise-address =172.16 。   120.200 --pod-network-cidr=192.168.0.0/16[init] 使用 Kubernetes 版本:v1.9.0[init] 使用授权模式:[Node RBAC][preflight] pre[ Run k4 ] ] 飞行检查。   [警告 FileExisting-crictl]:在系统路径 [preflight] 中找不到 crictl 发生了几个致命错误:[错误交换]:不支持在交换上运行。  如果您知道自己是什么,请禁用交换[预检]。好吧,您可以使用“--ignore-preflight-errors=...”来使检查成为非-致命的。  

解决方案:
1:kubelet 添加启动参数 --fail-swap-on=false

[Service]Environment="KUBELEET_KUBECONFIG_ARGS = --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"Environment="KUBELET_SYSTEM_PODS_ARGS=- [ k4]pod-manifest-path=/etc/kubernetes/manifests--allow-privileged=true"Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir = /etc/cni/net.d --cni-bin-dir=/opt/cni/bin"环境= " KUBELET_DNS_ARGS=--集群-dns=10.96 .0.10 --集群-domain=cluster.local"环境="KUBELET_AUTHZ_ARGS=--授权-模式= Webhook --客户端-ca[k]4]文件=/etc/kubernetes/pki/ca.crt“环境=”KUBELET_CADVISOR_ARGS=--cadvisor-端口=0“环境=”KUBELET_CGROUP_ARGS=--cgroup-驱动程序=systemd“环境=”KUBELET_CERTIFICATE_ARGS=--旋转-证书= true --cert-dir=/var/lib/kubelet/pki“环境=”KUBELET_SWAP_ARGS=- -fail-swap-on=false"ExecStart=ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_ CGROUP_ARGS L ET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS $KUBELET_SWAP_ARGS

2: kubeadm init 参数增加ignore-preflight-errors

 kubeadm init --apiserver-advertise-address=172.16.120.200 - [ k4 ]pod-网络-cidr=192.168.0.0/16 --忽略-preflight-errors "Swap"

3:此问题在物理机上可能不会发生。

最终安装成功

[root@k8s-host1 manifest]# kubeadm init --apiserver-advertise-address=172.16 .120.200 [ k4]-pod-network-cidr=192.168.0.0/16 --ignore-preflight-errors“Swap”[init] 使用 Kubernetes 版本:v1 .9.0[init ] ] 使用授权模式:[节点 RBAC][preflight] 执行 pre- 飞行检查。   [警告交换]:不支持在交换打开的情况下运行。  请禁用交换 [警告 FileExisting-crictl]:在系统路径 [preflight] 中找不到 crictl 启动 kubelet 服务 [证书] 生成 ca 证书和密钥。  [证书] 生成的apiserver证书和密钥。  [证书] apiserver 服务证书如下。   签署 DNS 名称 [k8s-host1 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] 和 IP [10.96.0.1 172.16.120.200][certificate] 生成 apiserver-kubelet- 客户端证书和密钥。  [证书] 生成 SA 密钥和公钥 [证书] 生成前端 - 代理 - CA 证书和密钥。  [certificate] 生成前端 - 代理 - 客户端证书和密钥。  [证书] “/etc/”中存在有效的证书和密钥。   kubernetes/pki"[kubeconfig] KubeConfig 文件写入磁盘:"admin.conf"[kubeconfig] KubeConfig 文件写入磁盘:"kubelet.conf"[kubeconfig] KubeConfig 文件写入磁盘:"controller-manager.conf" [kubeconfig] 将 KubeConfig 文件写入磁盘:“scheduler.conf”[controlplane] 组件 kube-apiserver 的静态 pod 清单位于“/etc/kubernetes/manifests/kube -apiserver.yaml”[c]ontrolplane] 将组件 kube-controller-manager 的静态 Pod 清单写入“/etc/kubernetes/manifests/kube-controller-manager.yaml” [controlplane] 组件 kube- 编写了一个静态 Pod ]scheduler 的清单到“/etc/kubernetes/manifests/kube-scheduler.yaml”[etcd]。  我将本地 etcd 实例的静态 Pod 清单写入“/etc/kubernetes/manifests/etcd.yaml”[init]。   kubelet 从目录“/etc/kubernetes/manifests”中将控制平面作为静态 Pod 启动。  [init] 如果您需要对控制平面进行映像,这可能需要一分钟或更长时间。  [apiclient] 所有控制平面组件都很好。   30.002346 秒后 [uploadconfig] 将 ConfigMap 'kubeadm-config' 中使用的配置保存到 'kube-system' 命名空间 [markmaster] 标记节点 k8s[k]4] 将标签和污点[markmaster]添加到主主机host1作为主节点k8s- 污点主机1并使用键/值标签:node-role.kubernetes.io/master=""[bootstraptoken] 使用的令牌:26ea24 .cb987cb5cf6f29a6 [bootstraptoken] 设置 RBAC 规则以允许节点引导令牌发布 CSR,以便节点可以获得长期证书凭证[bootstraptoken] 我们已配置 RBAC 规则以自动批准 CSR 引导令牌 [bootstraptoken] 我们已配置 RBAC允许集群中所有节点轮换客户端证书的规则 [bootstraptoken] 'kube- 在“public”命名空间中创建“cluster-info”ConfigMap [addons] 应用所需的附加组件: kube-dns[addons] ] 应用所需的附加组件:kube-proxyKubernetes master h要开始使用集群,您需要以普通用户身份运行以下命令: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube /config sudo chown $(id -u):$(id -g) $HOME/.kube/config 现在您需要将 pod 网络部署到集群。 运行“kubectl apply -f [podnetwork]”。   yaml": https://kubernetes.io/docs/concepts/cluster-administration/addons/ 现在在每个节点上以 root 身份运行以下命令: 这允许您加入任意数量的机器: kubeadm join [ k4][ k4]令牌 26ea24.cb987cb5cf6f29a6 172.16.120.200:6443 --发现-令牌-ca-证书-哈希sha256:a2d5e0391695bb122d4a43dc951f93934a 2a aa 1360e00556401a49ea0ec2bdab

> P.S. kubeadm join --token 26ea24.cb987cb5 必须注意。cf6f29a6 172.16.120.200:6443 - - 发现 - 令牌 - ca - 证书 - 哈希 sha256:a2d5e0391695bb122d4a43dc951f93934a2aaa1360e00556401a49ea0ec 2 ab 使得将来向 k8s 集群添加节点变得很容易 I'。会成功的。

将kube-apiserver指向上一节部署的etcd集群

首先创建上一节生成的etcd ca和其他证书需要cp到/etc /。 master主机上的etcd/ssl/下

默认情况下,kubeadm安装的是非集群、非加密的etcd节点,所以必须修改kube-apiserver.yaml。
修改后的 kube-apiserver.yaml:

apiVersion: v1kind: Podmetadata: Annotation: Scheduler.alpha.kubernetes.io/ritic-pod: "" Label: Component: kube [k4 ]apiserver 层:控制 - 平面名称:kube-apiserver 命名空间:kube- 系统规范:容器:- 命令:- kube-apiserver - -[ k4] 权限[ k4]privileged=true - --requestheader-用户名-headers=X-远程-用户---requestheader-组-标头=X-远程-组---请求标头-额外-标头-前缀=X-远程-额外-[k4 ] ] --service-cluster-ip-range=10.96.0.0/12 ---请求头-client-ca-file =/etc/kubernetes/pki/front-proxy-ca.crt ---proxy-client-key-file=/etc/kubernetes/pki/front - ]proxy-client.key - --enable-bootstrap-token-auth=true ---service-account[ k4]密钥 -文件=/etc/kubernetes/pki/sa.pub - --tls-cert-文件=/etc/kubernetes/pki/apiserver.crt - - -kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt - --kubelet-client[k4 ]key= /etc/kubernetes/pki/apiserver-kubelet-client.key - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt - --不安全-端口=0 [k4 ] ] --admission-control=初始化器、NamespaceLifecycle、LimitRanger、ServiceAccount、DefaultStorageClass、DefaultTolerationSeconds、NodeRestriction、ResourceQuota - --requestheader-allowed-names=front[ k4] ]代理-客户端- --广告-地址=172.16.120.200 - --客户端-ca-文件=/etc/kubernetes/ pki/ ca.crt - --secure-port=6443 ---kubelet-preferred-address-types=内部IP、外部IP、主机名- --tls-private-key-file=/etc/kubernetes/pki/apiserver.key - --authorization-mode= Node ,RBAC - ] --etcd-server=https://172.16.120.151:2379, https://172.16.120.152:2379,https://172.16.120.153:2379 - --etcd-cafile=/etc/etcd/ssl/ca.pem - --etcd[ k4]certfile=/etc/etcd/ssl/etcd.pem - --etcd-keyfile=/etc/etcd/ssl/etcd-key.pem 图片:gcr.io/google_containers /kube-apiserver-amd64:v1.9.0 livenessProbe: FailureThreshold: 8 httpGet: 主机: 172.16.120.200 路径: /healthz 端口: 6443 方案: HTTPSInitialDelaySeconds: 15 timeoutSeconds: 15 名称: kube-apiserver 资源:请求:CPU:250m volumeMounts:- mountPath:/etc/kubernetes/pki 名称:k8s-certs readOnly:true - mountPath:/etc/ssl/certs 名称:ca-certs readOnly:true [ k4]挂载路径:/etc/pki 名称:ca-certs-etc-pki只读:true - mountPath:/etc/etcd/ssl 名称:ca-certs-etc-etcd-ssl 只读:true hostNetwork:true 卷:- hostPath:路径:/etc /kubernetes/pki 类型:DirectoryOrCreate 名称:k8s-certs - hostPath:路径:/etc/ssl/certs 类型:DirectoryOrCreate 名称:ca-certs - hostPath:路径:/etc/pki 类型:目录或创建名称:ca-certs-etc-pki - 主机路径: 路径:/etc/etcd/ssl 类型:目录或创建名称:ca-certs-etc[k4 ] etcd- sslstatus: {}

请注意添加了以下四项:

--etcd-cafile =/etc/etcd/ ssl/ca.pem - -etcd-certfile=/etc/etcd/ssl/etcd.pem --etcd-keyfile=/etc/etcd/ssl/etcd- key.pem - ]-etcd-server=https://172.16.120.151:2379,https://172.16。120.152:2379,https://172.16.120.153:2379# 和 mount- mountPath: /etc/etcd/ssl 名称: ca-certs-etc-etcd-ssl readOnly: true [ k4] hostPath: path: /etc/etcd/ssl type: DirectoryOrCreate name: ca-certs-etc-etcd-ssl 

配置第一个master的三个主要组件:验证一切已成功启动

kubectl getComponentstatusesNAME 状态消息错误controller-managerhealthy okschedulerhealthy oketcd-1healthy {"health": "true"}etcd[k4 ]0 Healthy {"health": "true"}etcd-2 Healthy {"health": "true"}

安装另一台主机

我的一般做法是继续使用 kubeadm init -[ k4]。 apiserver-广告-地址=172.16.120.200 --pod-network-cidr=192.168.0.0/16--忽略-预检-错误“Swap”
主要目的是下载k8s相关组件的docker镜像。 它实际上所做的就是让 kubeadm 完成所有容易被忽略的工作。

接下来,将第一台机器上的/etc/kubernetes/中的所有文件复制到其他master主机上的相应目录,直到其他机器上的三个master组件启动成功。

此时,您已经拥有了一个完整的主高可用性集群。

未经允许不得转载:主机频道 » kubeadm部署k8s1.9高可用集群--4并部署master节点(k8s集群至少有多个节点)

评论 抢沙发

评论前必须登录!

 

本站不销售/不代购主机产品,不提供技术支持,仅出于个人爱好分享优惠信息,请遵纪守法文明上网

Copyright © 主机频道 - ZHUJIPINDAO.COM ,本站托管于国外主机商

© 2021-2024   主机频道   网站地图 琼ICP备2022006744号