Kubernetes v1.11.x HA 全手动安装教程(TL; DR)

  • 时间:
  • 浏览:0
  • 来源:大发彩票快三—大发彩票app

接着部署ExternalDNS来与CoreDNS同步资源纪录:

Dashboard 是 Kubernetes 官方开发的 Web-based 仪表板,目的是提升管理 Kubernetes 集群资源便利性,并以资源可视化法子,来我能 更直觉的看后整个集群资源状态,

确认上述有一一三个小多产生文件步骤完成后,即可设定所有master节点的 kubelet systemd 来启动 Kubernetes 组件。首先qq克隆好友 下列文件到指定路径:

记得/etc/fstab也要批注掉SWAP挂载。

关于bridge-nf-call-iptables的启用取决于有无将容器连接到Linux bridge或使用一些一些机制(如 SDN vSwitch)。

首先在k8s-m1执行下述指令来部署所有Prometheus能能 的组件:

若 Pod 是被 DaemonSet 管理励志的话 ,则我太满 Pending,不过若这么设定hostNetwork则会出问題。

KUBE_APISERVER这边设定为 VIP 地址。若我你能能 用手动表态凭证来进行授权励志的话 ,能能 参考 Certificate。

若看后以上资讯表示服务正常启动,趋于稳定若问題能能 用docker指令来查看。

后完成检查记得/etc/etcd/config.yml与/etc/haproxy/haproxy.cfg有无设定正确。

不管是在 Ubuntu 或 CentOS 都只能能 执行该指令就会自动安装最新版 Docker。

CentOS 安装完成后,能能 再执行以下指令:

凭证会建立system:kube-scheduler的使用者(凭证 CN),并被绑定在 RBAC Cluster Role 中的system:kube-scheduler来让 Scheduler 组件能能 存取能能 的 API object。这边通过以下指令产生 Scheduler 凭证:

另外由所有 master 节点提供一组 VIP 172.22.132.9。

另外在所有node节点安装socat:

这在阶段状态趋于稳定NotReady的英文正常,往下进行就会了解为什么我么我。

完成后,再次通过kubectl logs查看Pod:

qq克隆好友 kubeconfig文件至一些master节点:

本节说明何如部署一些官方常用的额外 Addons,如 Dashboard、Metrics Server 与 Ingress Controller 等等。

当完成master与node节点的部署,并组合成有一一三个小多可运作集群后,就能能 刚开始英文英文了了通过 kubectl 部署 Addons,Kubernetes 官方提供了多种 Addons 来加强 Kubernetes 的各种功能,如集群 DNS 解析的kube-dns(or CoreDNS)、内控 存取服务的kube-proxy与 Web-based 管理接口的dashboard等等。而其中一些 Addons 是被 Kubernetes 认定为必要的,因此本节将说明何如部署哪几个 Addons。

另外这边也推荐用Weave Scope来监控容器的网路Flow拓朴图。

部署后通过kubectl检查有无有启动:

接着在k8s-m1通过SSH启动所有node节点的kubelet:

在k8s-m1建立/etc/etcd/ssl文件夹,并产生 Etcd CA:

部署后通过kubectl检查有无有启动:

还会了解何如选者能能 阅读 Chris Love 的 Choosing a CNI Network Provider for Kubernetes 文章。

Dashboard 是 Kubernetes 官方开发的 Web-based 仪表板,目的是提升管理 Kubernetes 集群资源便利性,并以资源可视化法子,来我能 更直觉的看后整个集群资源状态,

接着利用kubectl来产生Admin的kubeconfig文件:

当确认上边步骤都没问題后,就能能 通过kubeclt建立简单NGINX来测试功能:

Kubernetes部署的版本信息:

要注意 CA JSON 檔中的CN(Common Name)与O(Organization)等内容是会影响 Kubernetes 组件认证的。

这边部署简单Jenkins来进行功能测试:

还会 Calico 提供了 Kubernetes resources YAML 文件来快速以容器法子部署网络插件至所有节点上,因此只能能 在k8s-m1通过 kubeclt 执行下面指令来建立:

在k8s-m1建立/etc/kubernetes/pki,并法子下面指令来产生CA:

若有安装 ipvsadm 励志的话 ,能能 通过以下指令查看 proxy 规则:

完成后,在任意一台master节点qq克隆好友 Admin kubeconfig文件,并通过简单指令验证:

确认 calico-node 都正常运作后,通过 kubectl exec 进入 calicoctl pod 来检查功能能 是正常:

完成后,通过dig 与nslookup工具检查上节测试Ingress的NGINX服务:

首先利用./hack/gen-configs.sh脚本在每台master节点产生组态文件:

首先在k8s-m1执行下述指令来建立CoreDNS Server,并检查有无部署正常:

想了解 Calico 与传统 overlay networks 的差异,能能 阅读 Difficulties with traditional overlay networks 文章。

测试完成后,就能能 通过以下指令来删除 Release:

在k8s-m1通过 kubeclt 执行下面指令来建立 Dashboard 至 Kubernetes,并检查有无正确部署:

接着在k8s-m1通过SSH启动所有master节点的kubelet:

在k8s-m1建立bootstrap使用者的kubeconfig:

这边-hostname的10.96.0.1是 Cluster IP 的 Kubernetes 端点; 172.22.132.9为 VIP 地址; kubernetes.default为 Kubernetes 系统在 default namespace 自动建立的 API service domain name。

发现 top 指令无法取得 Metrics,这表示 Kubernetes 集群这么安装 Heapster 或是 Metrics Server 来提供 Metrics API 给 top 指令取得资源使用量。

这边会发现跳出 403 Forbidden 问題,这是还会 kube-apiserver user 并这么 nodes 的资源访问权限,属于正常。

首先在k8s-m1安装Helm工具:

在k8s-m1通过kubeclt执行下面指令来建立,并检查有无部署成功:

External DNS 是 Kubernetes 小区的孵化项目,被用于定期同步 Kubernetes Service 与 Ingress 资源,并法子资源内容来自动设定公有云 DNS 服务的资源纪录(Record resources)。而还会部署都有公有云环境,因此能能 通过 CoreDNS 提供有一一三个小多内控 DNS 服务器,再由 ExternalDNS 与你这名 CoreDNS 做串接。

接着初始化Helm(这边会安装Tiller Server):

首先在k8s-m1执行下述指令来建立CoreDNS Server,并检查有无部署正常:

还会上述问題,亲戚亲戚朋友要在k8s-m1节点通过 kubectl 部署 Metrics Server 组件来处置:

所有 Addons 部署文件均存已放至k8s-manual-files中,因此在k8s-m1进入该目录,并依序下小节建立:

接着利用./hack/gen-manifests.sh脚本在每台master节点产生 Static pod YAML 文件,以及一些相关配置文件(如 EncryptionConfig):

确认文件都qq克隆好友 后,即可设定所有node节点的 kubelet systemd 来启动 Kubernetes 组件。首先在k8s-m1qq克隆好友 下列文件到指定路径:

首先在k8s-m1测试一下 kubectl top 指令:

首先利用./hack/gen-configs.sh脚本在每台master节点产生组态文件:

完成后,再次通过kubectl logs查看Pod:

而上述组件除了 kubelet 外,一些将通过 kubelet 以 Static Pod 法子进行部署,你这名法子能能 减少管理 Systemd 的服务,因此能通过 kubectl 来观察启动的容器状态。

确认上述有一一三个小多产生文件步骤完成后,即可设定所有master节点的 kubelet systemd 来启动 Kubernetes 组件。首先qq克隆好友 下列文件到指定路径:

接着产生Etcd凭证:

还会 Kubernetes Dashboard v1.7 版本还会不再提供 Admin 权限,因此能能 通过 kubeconfig 还会 Service Account 来进行登入能能 取得资源来呈现,这边建立有一一三个小多 Service Account 来绑定cluster-admin 以测试功能:

Kubernetes部署的网路信息:

Ingress 是 Kubernetes 中的有一一三个小多抽象资源,其功能是通过 Web Server 的 Virtual Host 概念以域名(Domain Name)法子转发到内控 Service,这处置了使用 Service 中的 NodePort 与 LoadBalancer 类型所带来的限制(如 Port 数量上限),而实现 Ingress 功能则是通过 Ingress Controller 来达成,它会负责监听 Kubernetes API 中的 Ingress 与 Service 资源对象,并在趋于稳定资源变化时,法子资源预期的结果来设定 Web Server。另外 Ingress Controller 有一些实现能能 选者:

接着在k8s-m1建立TLS Bootstrap Secret来提供自动签证使用:

觉得 Ingress 能能 让亲戚亲戚朋友通过域名法子存取 Kubernetes 内控 服务,因此若域名于法被测试机器解析励志的话 ,还会显示default backend – 404结果,而这突然趋于稳定在内控 自建环境上,觉得能能 通过修改主机/etc/hosts来描述,但未必弹性,因此下节将说明何如建立有一一三个小多 External DNS 与 DNS 服务器来提供自动解析 Ingress 域名。

再次通过nslookup检查,会发现能能 解析了,这时也就能通过cURL来测试结果:

本篇延续过往手动安装法子来部署 Kubernetes v1.11.x 版本的 High Availability 集群,而此次教学将直接透过裸机进行部署 Kubernetes 集群。以手动安装的目标是学习 Kubernetes 各组件关析、流程、设定与部署法子。若我你能能 这么累励志的话 ,能能 参考 Picking the Right Solution 来选者一些人最喜欢的法子。

首先在k8s-m1执行下述指令来建立 Ingress Controller,并检查有无部署正常:

这边主要确认文件中的${xxx}字符串有无有被更改,因此符合环境需求。删剪内容能能 查看k8s-manual-files。

本文转自中文社区-Kubernetes v1.11.x HA 全手动安装教程(TL; DR)

在这边会额外建立名称为anonymous-dashboard-proxy的 Cluster Role(Binding) 来让system:anonymous你这名匿名用户能能 通过 API Server 来 proxy 到 Kubernetes Dashboard,而你这名 RBAC 规则仅能能 存取services/proxy资源,以及https:kubernetes-dashboard:资源名称。

KUBE_APISERVER这边设定为VIP位址。

完成后记得检查/etc/kubernetes/manifests,/etc/kubernetes/encryption与/etc/kubernetes/audit目录中的文件有无的英文定正确。

关于bridge-nf-call-iptables的启用取决于有无将容器连接到Linux bridge或使用一些一些机制(如 SDN vSwitch)。

想了解 Calico 与传统 overlay networks 的差异,能能 阅读 Difficulties with traditional overlay networks 文章。

这在阶段状态趋于稳定NotReady的英文正常,往下进行就会了解为什么我么我。

产生完成后,将kubelet凭证qq克隆好友 到所有master节点上:

而 Ingress Controller 的实现不只哪几个项目,还有太满太满太满太满能能 在网络上找到,未来一些人也会写一篇 Ingress Controller 的实作法子文章。

首先在k8s-m1测试一下 kubectl top 指令:

而 Ingress Controller 的实现不只哪几个项目,还有太满太满太满太满能能 在网络上找到,未来一些人也会写一篇 Ingress Controller 的实作法子文章。

完成后,在任意一台master节点qq克隆好友 Admin kubeconfig文件,并通过简单指令验证:

当服务都正常运作时,就能能 通过浏览器查看HTTP:// node_ip:31161页面。

在首先k8s-m1节点展示进入k8s-manual-files目录,并依序执行下述指令来完成部署:

kube-proxy 是实现 Kubernetes Service 资源功能的关键组件,你这名组件会通过 DaemonSet 在每台节点上执行,因此监听 API Server 的 Service 与 Endpoint 资源对象的事件,并法子资源预期状态通过 iptables 或 ipvs 来实现网络转发,而本次安装采用 ipvs。

确认文件都qq克隆好友 后,即可设定所有node节点的 kubelet systemd 来启动 Kubernetes 组件。首先在k8s-m1qq克隆好友 下列文件到指定路径:

因此亲戚亲戚朋友能能 在完成后,通过以下连结来进入 Kubernetes Dashboard:

凭证会建立system:kube-scheduler的使用者(凭证 CN),并被绑定在 RBAC Cluster Role 中的system:kube-scheduler来让 Scheduler 组件能能 存取能能 的 API object。这边通过以下指令产生 Scheduler 凭证:

接着在k8s-m1通过SSH启动所有master节点的kubelet:

接着利用kubectl来产生Controller Manager的kubeconfig档:

在k8s-m1建立/etc/kubernetes/pki,并法子下面指令来产生CA:

这边会发现 Pod 趋于稳定Pending状态,这是还会 Kubernetes 的集群网络这么建立,因此所有节点会趋于稳定NotReady状态,而这也因为 Kubernetes Scheduler 无法替 Pod 找到适合节点而趋于稳定Pending,为了处置你这名问題,下节将说明与建立 Kubernetes 集群网络。

Kubernetes部署的版本信息:

接着初始化Helm(这边会安装Tiller Server):

Kubernetes Controller Manager 利用 Key pair 来产生与表态 Service Account 的 tokens,而这边不通过 CA 做认证,太满太满太满太满我建立一组公私钥来让 API Server 与 Controller Manager 使用:

因此建立TLS Bootstrap Autoapprove RBAC来提供自动受理CSR:

另外由所有 master 节点提供一组 VIP 172.22.132.9。

本节将通过 CoreDNS 取代 Kube DNS 作为集群服务发现组件,还会 Kubernetes 能能 让 Pod 与 Pod 之间能能 互相沟通,然而能能 能沟通能能 知道彼此的 IP 才行,而你这名做法通常是通过 Kubernetes API 来取得达到,因此 Pod IP 会还会生命周期变化而改变,我能 是什么做法无法弹性使用,且还会增加 API Server 负担,基于此问題 Kubernetes 提供了 DNS 服务来作为查询,让 Pod 能能 以 Service 名称作为域名来查询 IP 地址,因此用户就再能能 关切实际 Pod IP,而 DNS 也会根据 Pod 变化更新资源纪录(Record resources)。

接着利用kubectl来产生Admin的kubeconfig文件:

CoreDNS 是由 CNCF 维护的开源 DNS 项目,该项目前身是 SkyDNS,其采用了 Caddy 的一偏离 来开发服务器框架,使其能能 建构一套快速灵活的 DNS,而 CoreDNS 每个功能能能 被实作成有一一三个小多插件的上边件,如 Log、Cache、Kubernetes 等功能,甚至能能 将源纪录储存至 Redis、Etcd 中。

展示进入首先k8s-m1节点,因此关闭该节点:

首先在k8s-m1执行下述指令来部署所有Prometheus能能 的组件:

接着部署ExternalDNS来与CoreDNS同步资源纪录:

Ingress 是 Kubernetes 中的有一一三个小多抽象资源,其功能是通过 Web Server 的 Virtual Host 概念以域名(Domain Name)法子转发到内控 Service,这处置了使用 Service 中的 NodePort 与 LoadBalancer 类型所带来的限制(如 Port 数量上限),而实现 Ingress 功能则是通过 Ingress Controller 来达成,它会负责监听 Kubernetes API 中的 Ingress 与 Service 资源对象,并在趋于稳定资源变化时,法子资源预期的结果来设定 Web Server。另外 Ingress Controller 有一些实现能能 选者:

接着利用kubectl来产生Controller Manager的kubeconfig档:

后完成浏览通过器存取http://172.22.132.8:50来查看有无能连线,若能能 会如下图结果。

这在阶段状态趋于稳定NotReady的英文正常,往下进行就会了解为什么我么我。

在首先k8s-m1节点展示进入k8s-manual-files目录,并依序执行下述指令来完成部署:

完成后,通过dig 工具来检查有无DNS有无正常:

另外在所有node节点安装socat:

首先在k8s-m1节点产生所有 master 节点的 kubelet 凭证,这边通过下面脚从前产生:

接下来将建立TLS Bootstrapping来让Node签证并授权注册到集群。

Metrics Server 是实现了资源 Metrics API 的组件,其目标是取代 Heapster 作为 Pod 与 Node 提供资源的 Usage metrics,该组件会从每个 Kubernetes 节点上的 Kubelet 所公开的 Summary API 中分类分类整理 Metrics。

这边-hostname的10.96.0.1是 Cluster IP 的 Kubernetes 端点; 172.22.132.9为 VIP 地址; kubernetes.default为 Kubernetes 系统在 default namespace 自动建立的 API service domain name。

本节还会通过 CFSSL 工具来产生不同组件的凭证,如 Etcd、Kubernetes API Server 等等,其中各组件还会有有一一三个小多根数字证书认证机构(Root Certificate Authority)被用在组件之间的认证。

Kubernetes 在默认状态下与 Docker 的网络有所不同。在 Kubernetes 中有 六个问題是能能 被处置的,分别为:

完成后,通过检查节点有无不再是NotReady,以及Pod有无不再趋于稳定Pending:

本节还会通过 CFSSL 工具来产生不同组件的凭证,如 Etcd、Kubernetes API Server 等等,其中各组件还会有有一一三个小多根数字证书认证机构(Root Certificate Authority)被用在组件之间的认证。

本篇延续过往手动安装法子来部署 Kubernetes v1.11.x 版本的 High Availability 集群,而此次教学将直接透过裸机进行部署 Kubernetes 集群。以手动安装的目标是学习 Kubernetes 各组件关析、流程、设定与部署法子。若我你能能 这么累励志的话 ,能能 参考 Picking the Right Solution 来选者一些人最喜欢的法子。

Admin 被用来绑定 RBAC Cluster Role 中 cluster-admin,当我你能能 操作所有 Kubernetes 集群功能时,就能能 利用这边产生的 kubeconfig 文件案。这边通过以下指令产生 Kubernetes Admin 凭证:

在刚开始英文英文了了部署前,在k8-m1将能能 用到的文件qq克隆好友 到所有node节点上:

Kubernetes部署的网路信息:

qq克隆好友 token因此中放 Kubernetes dashboard。注意这边一般来说要针对不同 User 开启特定访问权限。

这边使用 Node authorizer 来让节点的 kubelet 能能 存取如 services、endpoints 等 API,而使用 Node authorizer 需定义 system:nodes 群组(凭证的 Organization),因此中有 system:node:<nodeName>的使用者名称(凭证的 Common Name)。

完成后通过cURL工具来测试功能能 是正常:

接着在k8s-m1建立TLS Bootstrap Secret来提供自动签证使用:

完成后,等待图片一些时间(约50s – 1m)分类分类整理指标,再次执行kubectl top指令查看:

此凭证将被用于 Authenticating Proxy 的功能上,而该功能主太满太满太满太满我提供 API Aggregation 的认证。首先通过以下指令产生 CA:

当服务都正常运作时,就能能 通过浏览器查看HTTP:// node_ip:31161页面。

在首先k8s-m1节点展示进入k8s-manual-files目录,并依序执行下述指令来完成部署:

本节将说明何如建立与设定 Kubernetes Node 节点,Node 是主要执行容器实例(Pod)的工作节点。这过程只能能 将 PKI、Bootstrap conf 等文件qq克隆好友 到机器上,再用 kubelet 启动即可。

凭证将qq克隆好友 到一些master节点:

接着利用./hack/gen-manifests.sh脚本在每台master节点产生 Static pod YAML 文件,以及一些相关配置文件(如 EncryptionConfig):

凭证会建立system:kube-controller-manager的使用者(凭证 CN),并被绑定在 RBAC Cluster Role 中的system:kube-controller-manager来让 Controller Manager 组件能能 存取能能 的 API object。这边通过以下指令产生 Controller Manager 凭证:

接着产生 Front proxy client 凭证:

Kubernetes 在默认状态下与 Docker 的网络有所不同。在 Kubernetes 中有 六个问題是能能 被处置的,分别为:

这边主要确认文件案中的${xxx}字符串有无有被更改,因此符合环境。删剪内容能能 查看k8s-manual-files。

而还会上述问題,Kubernetes 实现了 TLS Bootstrapping 来处置此问題,你这名做法是先让 kubelet 以有一一三个小多低权限使用者(有一一三个小多能存取 CSR API 的 Token)存取 API Server,接着对 API Server 提出申请凭证表态请求,并在受理后由 API Server 动态表态 kubelet 凭证提供给对应的node节点使用。具体作法请参考 TLS Bootstrapping 与 Authenticating with Bootstrap Tokens。

本节将说明何如部署与设定Kubernetes Master角色中的各组件,在刚开始英文英文了了前先简单了解一下各组件功能:

接着进入到k8s-m2节点,通过kubectl来检查集群有无能能 正常执行:

在首先k8s-m1节点展示进入k8s-manual-files目录,并依序执行下述指令来完成部署:

KUBE_APISERVER这边设定为 VIP 地址。若我你能能 用手动表态凭证来进行授权励志的话 ,能能 参考 Certificate。

若想让HPA使用Prometheus的Metrics励志的话 ,能能 阅读Custom Metrics Server来了解。

在k8s-m1建立/etc/etcd/ssl文件夹,并产生 Etcd CA:

作者:Kyle.Bai

接着设定 Taints and Tolerations 来让一些特定 Pod 能能 排程到所有master节点上:

从上述了解 Kubernetes 有多种网络能能 选者,而本教学选者了 Calico 作为集群网络的使用。Calico 是一款纯 Layer 3 的网络,其好处是它整合了各种云原生平台(Docker、Mesos 与 OpenStack 等),且 Calico 不采用 vSwitch,太满太满太满太满我在每个 Kubernetes 节点使用 vRouter 功能,并通过 Linux Kernel 既有的 L3 forwarding 功能,而当数据中心比较复杂度增加时,Calico 也能能 利用 BGP route reflector 来达成。

而 Kubernetes 对于任何网络的实现能能 满足以下基本要求(除非是有意调整的网络分段策略):

qq克隆好友 文件至一些Etcd节点,这边为所有master节点:

通过以下指令产生Kubernetes API Server凭证:

本节说明何如部署一些官方常用的额外 Addons,如 Dashboard、Metrics Server 与 Ingress Controller 等等。

还会 Kubernetes Dashboard v1.7 版本还会不再提供 Admin 权限,因此能能 通过 kubeconfig 还会 Service Account 来进行登入能能 取得资源来呈现,这边建立有一一三个小多 Service Account 来绑定cluster-admin 以测试功能:

Helm 是 Kubernetes Chart 的管理工具,Kubernetes Chart 是一套预先组态的 Kubernetes 资源。其中Tiller Server主要负责接收来至 Client 的指令,并通过 kube-apiserver 与 Kubernetes 集群做沟通,根据 Chart 定义的内容,来产生与管理各种对应 API 对象的 Kubernetes 部署文件(又称为 Release)。

通过kubectl logs来查看容器的日志:

这边主要确认文件案中的${xxx}字符串有无有被更改,因此符合环境。删剪内容能能 查看k8s-manual-files。

后完成浏览通过器存取http://172.22.132.8:50来查看有无能连线,若能能 会如下图结果。

若没问題,就能能 将kube-system下的calicoctl pod删除。

qq克隆好友 kubeconfig文件至一些master节点:

当确认上边步骤都没问題后,就能能 通过kubeclt建立简单NGINX来测试功能:

本教程采用以下节点数与机器规格进行部署裸机(Bare-metal),操作系统采用Ubuntu 16+(理论上 CentOS 7+ 也行)进行测试:

完成后通过cURL工具来测试功能能 是正常:

若看后以上资讯表示服务正常启动,趋于稳定若问題能能 用docker指令来查看。

-hostname需修改成所有masters节点。

为了方便管理集群,因此能能 通过 kubectl logs 来查看,但还会 API 权限问題,故能能 建立有一一三个小多 RBAC Role 来获取访问权限,这边在k8s-m1节点执行以下指令建立:

接着在k8s-m1通过SSH启动所有node节点的kubelet:

首先在k8s-m1安装Helm工具:

-hostname需修改成所有masters节点。

在k8s-m1建立bootstrap使用者的kubeconfig:

若没问題,就能能 将kube-system下的calicoctl pod删除。

完成后,通过kubectl检查服务有无正常运行:

接着进入到k8s-m2节点,通过kubectl来检查集群有无能能 正常执行:

这边使用 Node authorizer 来让节点的 kubelet 能能 存取如 services、endpoints 等 API,而使用 Node authorizer 需定义 system:nodes 群组(凭证的 Organization),因此中有 system:node:<nodeName>的使用者名称(凭证的 Common Name)。

确认没问題后,通过浏览器查看 prometheus.monitoring.k8s.local 与 grafana.monitoring.k8s.local 有无正常,若没问題就能能 看后如下图所示结果。

当所有文件建立与产生完成后,将一些未必要文件删除:

接着利用kubectl来产生Scheduler的kubeconfig文件:

kube-proxy 是实现 Kubernetes Service 资源功能的关键组件,你这名组件会通过 DaemonSet 在每台节点上执行,因此监听 API Server 的 Service 与 Endpoint 资源对象的事件,并法子资源预期状态通过 iptables 或 ipvs 来实现网络转发,而本次安装采用 ipvs。

Metrics Server 是实现了资源 Metrics API 的组件,其目标是取代 Heapster 作为 Pod 与 Node 提供资源的 Usage metrics,该组件会从每个 Kubernetes 节点上的 Kubelet 所公开的 Summary API 中分类分类整理 Metrics。

qq克隆好友 文件至一些Etcd节点,这边为所有master节点:

凭证会建立system:kube-controller-manager的使用者(凭证 CN),并被绑定在 RBAC Cluster Role 中的system:kube-controller-manager来让 Controller Manager 组件能能 存取能能 的 API object。这边通过以下指令产生 Controller Manager 凭证:

而上述组件除了 kubelet 外,一些将通过 kubelet 以 Static Pod 法子进行部署,你这名法子能能 减少管理 Systemd 的服务,因此能通过 kubectl 来观察启动的容器状态。

这边截至已完成master节点部署,将接下来针对node的部署进行说明。

通过以下指令产生Kubernetes API Server凭证:

还会 Calico 提供了 Kubernetes resources YAML 文件来快速以容器法子部署网络插件至所有节点上,因此只能能 在k8s-m1通过 kubeclt 执行下面指令来建立:

这边会发现 Pod 趋于稳定Pending状态,这是还会 Kubernetes 的集群网络这么建立,因此所有节点会趋于稳定NotReady状态,而这也因为 Kubernetes Scheduler 无法替 Pod 找到适合节点而趋于稳定Pending,为了处置你这名问題,下节将说明与建立 Kubernetes 集群网络。

完成后记得检查/etc/kubernetes/manifests,/etc/kubernetes/encryption与/etc/kubernetes/audit目录中的文件有无的英文定正确。

KUBE_APISERVER这边设定为VIP位址。

首先在k8s-m1节点产生所有 master 节点的 kubelet 凭证,这边通过下面脚从前产生:

完成还会能能 一段时间来下载映像档与启动组件,能能 利用该指令来监看:

这边会发现跳出 403 Forbidden 问題,这是还会 kube-apiserver user 并这么 nodes 的资源访问权限,属于正常。

CoreDNS 是由 CNCF 维护的开源 DNS 项目,该项目前身是 SkyDNS,其采用了 Caddy 的一偏离 来开发服务器框架,使其能能 建构一套快速灵活的 DNS,而 CoreDNS 每个功能能能 被实作成有一一三个小多插件的上边件,如 Log、Cache、Kubernetes 等功能,甚至能能 将源纪录储存至 Redis、Etcd 中。

在刚开始英文英文了了部署前,在k8-m1将能能 用到的文件qq克隆好友 到所有node节点上:

完成后,在任意一台master节点qq克隆好友 Admin kubeconfig文件,并通过简单指令验证:

庆幸的是 Kubernetes 还会有非常多种的网络模型以网络插件(Network Plugins)法子被实现,因此能能 选者满足一些人需求的网络功能来使用。另外 Kubernetes 中的网络插件有以下三种形式:

关闭是为了方便安装使用,若有能能 防火墙能能 参考 Required ports 来设定。

而还会上述问題,Kubernetes 实现了 TLS Bootstrapping 来处置此问題,你这名做法是先让 kubelet 以有一一三个小多低权限使用者(有一一三个小多能存取 CSR API 的 Token)存取 API Server,接着对 API Server 提出申请凭证表态请求,并在受理后由 API Server 动态表态 kubelet 凭证提供给对应的node节点使用。具体作法请参考 TLS Bootstrapping 与 Authenticating with Bootstrap Tokens。

Kubernetes Controller Manager 利用 Key pair 来产生与表态 Service Account 的 tokens,而这边不通过 CA 做认证,太满太满太满太满我建立一组公私钥来让 API Server 与 Controller Manager 使用:

本节将说明何如建立与设定 Kubernetes Node 节点,Node 是主要执行容器实例(Pod)的工作节点。这过程只能能 将 PKI、Bootstrap conf 等文件qq克隆好友 到机器上,再用 kubelet 启动即可。

这在阶段状态趋于稳定NotReady的英文正常,往下进行就会了解为什么我么我。

当完成master与node节点的部署,并组合成有一一三个小多可运作集群后,就能能 刚开始英文英文了了通过 kubectl 部署 Addons,Kubernetes 官方提供了多种 Addons 来加强 Kubernetes 的各种功能,如集群 DNS 解析的kube-dns(or CoreDNS)、内控 存取服务的kube-proxy与 Web-based 管理接口的dashboard等等。而其中一些 Addons 是被 Kubernetes 认定为必要的,因此本节将说明何如部署哪几个 Addons。

本节将通过 CoreDNS 取代 Kube DNS 作为集群服务发现组件,还会 Kubernetes 能能 让 Pod 与 Pod 之间能能 互相沟通,然而能能 能沟通能能 知道彼此的 IP 才行,而你这名做法通常是通过 Kubernetes API 来取得达到,因此 Pod IP 会还会生命周期变化而改变,我能 是什么做法无法弹性使用,且还会增加 API Server 负担,基于此问題 Kubernetes 提供了 DNS 服务来作为查询,让 Pod 能能 以 Service 名称作为域名来查询 IP 地址,因此用户就再能能 关切实际 Pod IP,而 DNS 也会根据 Pod 变化更新资源纪录(Record resources)。

本教程采用以下节点数与机器规格进行部署裸机(Bare-metal),操作系统采用Ubuntu 16+(理论上 CentOS 7+ 也行)进行测试:

完成后,在任意一台master节点qq克隆好友 Admin kubeconfig文件,并通过简单指令验证:

还会本教程采用 TLS 认证来确保 Kubernetes 集群的安全性,因此每个节点的 kubelet 能能 通过 API Server 的 CA 进行身份验证后,能能 与 API Server 进行沟通,而这过程过去都有采用手动法子针对每台节点(master与node)单独表态凭证,再设定给 kubelet 使用,然而你这名法子是一件繁琐的事情,还会当节点扩展到一定程度时,还会非常费时,甚至延伸初管理不易问題。

首先在k8s-m1通过 Git 取得部署用文件:

P.S. Ingress 规则也支持不同 Path 的服务转发,能能 参考上边提供的官方文件来设定。

当成功到这边时,有一一三个小多能运作的 Kubernetes 集群基本上就完成了,接下来将介绍一些好用的 Addons 来帮助使用与管理 Kubernetes。

接着利用kubectl来产生Scheduler的kubeconfig文件:

首先在k8s-m1通过 Git 取得部署用文件:

到这边就表示node节点部署已完成了,接下来章节将针对Kubernetes Addons安装进 行说明。

庆幸的是 Kubernetes 还会有非常多种的网络模型以网络插件(Network Plugins)法子被实现,因此能能 选者满足一些人需求的网络功能来使用。另外 Kubernetes 中的网络插件有以下三种形式:

还会上述问題,亲戚亲戚朋友要在k8s-m1节点通过 kubectl 部署 Metrics Server 组件来处置:

而这时若有使用HPA励志的话 ,就能能 正确抓到Pod的CPU与Memory使用量了。

接下来将建立TLS Bootstrapping来让Node签证并授权注册到集群。

而这时若有使用HPA励志的话 ,就能能 正确抓到Pod的CPU与Memory使用量了。

确认没问題后,通过浏览器查看 prometheus.monitoring.k8s.local 与 grafana.monitoring.k8s.local 有无正常,若没问題就能能 看后如下图所示结果。

在k8s-m1通过kubeclt执行下面指令来建立,并检查有无部署成功:

在k8s-m1通过 kubeclt 执行下面指令来建立 Dashboard 至 Kubernetes,并检查有无正确部署:

记得/etc/fstab也要批注掉SWAP挂载。

完成后,等待图片一些时间(约50s – 1m)分类分类整理指标,再次执行kubectl top指令查看:

到这边就表示node节点部署已完成了,接下来章节将针对Kubernetes Addons安装进 行说明。

另外这边也推荐用Weave Scope来监控容器的网路Flow拓朴图。

刚开始英文英文了了部署集群前需先确保以下条件已达成:

因此建立TLS Bootstrap Autoapprove RBAC来提供自动受理CSR:

为了方便管理集群,因此能能 通过 kubectl logs 来查看,但还会 API 权限问題,故能能 建立有一一三个小多 RBAC Role 来获取访问权限,这边在k8s-m1节点执行以下指令建立:

这边截至已完成master节点部署,将接下来针对node的部署进行说明。

后完成检查记得/etc/etcd/config.yml与/etc/haproxy/haproxy.cfg有无设定正确。

这还会无法通过 nslookup 解析域名,这是还会测试机器并这么使用你这名 DNS 服务器,能能 通过修改/etc/resolv.conf来加入,还会类式下图法子(不同 OS 有差异,不过都有网络设定中改)。

若有安装 ipvsadm 励志的话 ,能能 通过以下指令查看 proxy 规则:

从上述了解 Kubernetes 有多种网络能能 选者,而本教学选者了 Calico 作为集群网络的使用。Calico 是一款纯 Layer 3 的网络,其好处是它整合了各种云原生平台(Docker、Mesos 与 OpenStack 等),且 Calico 不采用 vSwitch,太满太满太满太满我在每个 Kubernetes 节点使用 vRouter 功能,并通过 Linux Kernel 既有的 L3 forwarding 功能,而当数据中心比较复杂度增加时,Calico 也能能 利用 BGP route reflector 来达成。

这还会无法通过 nslookup 解析域名,这是还会测试机器并这么使用你这名 DNS 服务器,能能 通过修改/etc/resolv.conf来加入,还会类式下图法子(不同 OS 有差异,不过都有网络设定中改)。

在k8s-m1通过kubeclt执行下面指令来建立,并检查有无部署成功:

还会 Heapster 将要被移弃,因此这边选者 Prometheus 作为第三方的集群监控方案。而本次安装采用 CoreOS 开发的 Prometheus Operator 用于管理在 Kubernetes 上的 Prometheus 集群与资源,更多关于 Prometheus Operator 的信息能能 参考小弟的 Prometheus Operator 介绍与安装 文章。

凭证将qq克隆好友 到一些master节点:

在k8s-m1通过kubeclt执行下面指令来建立,并检查有无部署成功:

要注意 CA JSON 檔中的CN(Common Name)与O(Organization)等内容是会影响 Kubernetes 组件认证的。

产生完成后,将kubelet凭证qq克隆好友 到所有master节点上:

还会本教程采用 TLS 认证来确保 Kubernetes 集群的安全性,因此每个节点的 kubelet 能能 通过 API Server 的 CA 进行身份验证后,能能 与 API Server 进行沟通,而这过程过去都有采用手动法子针对每台节点(master与node)单独表态凭证,再设定给 kubelet 使用,然而你这名法子是一件繁琐的事情,还会当节点扩展到一定程度时,还会非常费时,甚至延伸初管理不易问題。

而 Kubernetes 对于任何网络的实现能能 满足以下基本要求(除非是有意调整的网络分段策略):

接着利用 kubectl 来产生 kubelet 的 kubeconfig 文件,这边通过脚从前产生所有master节点的文件:

觉得 Ingress 能能 让亲戚亲戚朋友通过域名法子存取 Kubernetes 内控 服务,因此若域名于法被测试机器解析励志的话 ,还会显示default backend – 404结果,而这突然趋于稳定在内控 自建环境上,觉得能能 通过修改主机/etc/hosts来描述,但未必弹性,因此下节将说明何如建立有一一三个小多 External DNS 与 DNS 服务器来提供自动解析 Ingress 域名。

完成后,通过检查节点有无不再是NotReady,以及Pod有无不再趋于稳定Pending:

还会了解何如选者能能 阅读 Chris Love 的 Choosing a CNI Network Provider for Kubernetes 文章。

所有 Addons 部署文件均存已放至k8s-manual-files中,因此在k8s-m1进入该目录,并依序下小节建立:

展示进入首先k8s-m1节点,因此关闭该节点:

发现 top 指令无法取得 Metrics,这表示 Kubernetes 集群这么安装 Heapster 或是 Metrics Server 来提供 Metrics API 给 top 指令取得资源使用量。

External DNS 是 Kubernetes 小区的孵化项目,被用于定期同步 Kubernetes Service 与 Ingress 资源,并法子资源内容来自动设定公有云 DNS 服务的资源纪录(Record resources)。而还会部署都有公有云环境,因此能能 通过 CoreDNS 提供有一一三个小多内控 DNS 服务器,再由 ExternalDNS 与你这名 CoreDNS 做串接。

完成还会能能 一段时间来下载映像档与启动组件,能能 利用该指令来监看:

完成后,通过kubectl检查服务有无正常运行:

删除未必要的文件,检查并/etc/etcd/ssl目录有无成功建立以下文件:

接着依照以下小节来建立TLS凭证。

Admin 被用来绑定 RBAC Cluster Role 中 cluster-admin,当我你能能 操作所有 Kubernetes 集群功能时,就能能 利用这边产生的 kubeconfig 文件案。这边通过以下指令产生 Kubernetes Admin 凭证:

再次通过nslookup检查,会发现能能 解析了,这时也就能通过cURL来测试结果:

完成后,通过dig 与nslookup工具检查上节测试Ingress的NGINX服务:

我你能能 了解更多Helm Apps励志的话 ,能能 到Kubeapps Hub网站寻找。

在这边会额外建立名称为anonymous-dashboard-proxy的 Cluster Role(Binding) 来让system:anonymous你这名匿名用户能能 通过 API Server 来 proxy 到 Kubernetes Dashboard,而你这名 RBAC 规则仅能能 存取services/proxy资源,以及https:kubernetes-dashboard:资源名称。

qq克隆好友 token因此中放 Kubernetes dashboard。注意这边一般来说要针对不同 User 开启特定访问权限。

首先在k8s-m1执行下述指令来建立 Ingress Controller,并检查有无部署正常:

还会 Heapster 将要被移弃,因此这边选者 Prometheus 作为第三方的集群监控方案。而本次安装采用 CoreOS 开发的 Prometheus Operator 用于管理在 Kubernetes 上的 Prometheus 集群与资源,更多关于 Prometheus Operator 的信息能能 参考小弟的 Prometheus Operator 介绍与安装 文章。

当成功到这边时,有一一三个小多能运作的 Kubernetes 集群基本上就完成了,接下来将介绍一些好用的 Addons 来帮助使用与管理 Kubernetes。

接着产生 Front proxy client 凭证:

若 Pod 是被 DaemonSet 管理励志的话 ,则我太满 Pending,不过若这么设定hostNetwork则会出问題。

关闭是为了方便安装使用,若有能能 防火墙能能 参考 Required ports 来设定。

若想让HPA使用Prometheus的Metrics励志的话 ,能能 阅读Custom Metrics Server来了解。

这边主要确认文件中的${xxx}字符串有无有被更改,因此符合环境需求。删剪内容能能 查看k8s-manual-files。

删除未必要的文件,检查并/etc/etcd/ssl目录有无成功建立以下文件:

这边部署简单Jenkins来进行功能测试:

本节将说明何如部署与设定Kubernetes Master角色中的各组件,在刚开始英文英文了了前先简单了解一下各组件功能:

Helm 是 Kubernetes Chart 的管理工具,Kubernetes Chart 是一套预先组态的 Kubernetes 资源。其中Tiller Server主要负责接收来至 Client 的指令,并通过 kube-apiserver 与 Kubernetes 集群做沟通,根据 Chart 定义的内容,来产生与管理各种对应 API 对象的 Kubernetes 部署文件(又称为 Release)。

接着产生Etcd凭证:

这边域名为k8s.local,修改能能 文件中的coredns-cm.yml来改变。

因此亲戚亲戚朋友能能 在完成后,通过以下连结来进入 Kubernetes Dashboard:

完成后,通过dig 工具来检查有无DNS有无正常:

P.S. Ingress 规则也支持不同 Path 的服务转发,能能 参考上边提供的官方文件来设定。

不管是在 Ubuntu 或 CentOS 都只能能 执行该指令就会自动安装最新版 Docker。

CentOS 安装完成后,能能 再执行以下指令:

我你能能 了解更多Helm Apps励志的话 ,能能 到Kubeapps Hub网站寻找。

当所有文件建立与产生完成后,将一些未必要文件删除:

确认 calico-node 都正常运作后,通过 kubectl exec 进入 calicoctl pod 来检查功能能 是正常:

这边域名为k8s.local,修改能能 文件中的coredns-cm.yml来改变。

接着利用 kubectl 来产生 kubelet 的 kubeconfig 文件,这边通过脚从前产生所有master节点的文件:

接着设定 Taints and Tolerations 来让一些特定 Pod 能能 排程到所有master节点上:

刚开始英文英文了了部署集群前需先确保以下条件已达成:

测试完成后,就能能 通过以下指令来删除 Release:

接着依照以下小节来建立TLS凭证。

通过kubectl logs来查看容器的日志:

此凭证将被用于 Authenticating Proxy 的功能上,而该功能主太满太满太满太满我提供 API Aggregation 的认证。首先通过以下指令产生 CA: