K8S 学习笔记 | 如何部署 Kubernetes masK8S 学习笔记 | 如何部署 Kubernetes master 节点 ter 节点 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
caicloud2015
V2EX    Kubernetes

K8S 学习笔记 | 如何部署 Kubernetes masK8S 学习笔记 | 如何部署 Kubernetes master 节点 ter 节点

  •  
  •   caicloud015 2017-07-27 15:14:22 +08:00 3701 次点击
    这是一个创建于 3062 天前的主题,其中的信息可能已经有所发展或是发生改变。

    宋净超( Jimmy Song),TalkingData 容器技术负责人,微服务和云原生应用布道者。2017 年初开始研究 Kubernetes,至目前已发表近 40 篇 Kubernetes 学习笔记。同时,他也是「 K8sMeetup 中国社区」的活跃者,见证了「 K8sMeetup 中国社区」的一路成长。

    经 Jimmy Song 本人授权, 从本周开始,K8sMeetup 中国将转载他的 Kubernetes 学习笔记,由浅入深地分享他在学习过程中的收获。7 月 22 日,北京 K8S 2 周年 Meetup,Jimmy Song 也将到现场进行分享,欢迎 Kubernetes 爱好者届时参与。 前言:

    这是和我一步步部署 Kubernetes 集群项目 ((fork 自 opsnull)) 中的一篇文章,下文是结合我之前部署 Kubernetes 的过程产生的 Kuberentes 环境,部署 master 节点的 kube-apiserver,kube-controller-manager 和 kube-scheduler 的过程。

    Kubernetes master 节点安装

    Kubernetes master 节点包含的组件: kube-apiserver kube-scheduler kube-controller-manager

    目前这三个组件需要部署在同一台机器上。

    kube-scheduler,kube-controller-manager 和 kube-apiserver 三者的功能紧密相关; 同时只能有一个 kube-scheduler,kube-controller-manager 进程处于工作状态,如果运行多个,则需要通过选举产生一个 leader ;

    本文档记录部署一个三个节点的 Kubernetes master 集群步骤。(后续创建一个 load balancer 来代理访问 kube-apiserver 的请求)

    TLS 证书文件

    PEM 和 token.csv 证书文件我们在 TLS 证书和秘钥这一步中已经创建过了,我们再检查一下。

    下载最新版本的二进制文件

    有两种下载方式

    方式一: 从 github release 页面下载发布版 tarball,解压后再执行下载脚本

    方式二: 从 CHANGELOG 页面下载 client 或 servertarball 文件

    server 的 tarball kubernetes-server-linux-amd64.tar.gz 已经包含了 client ( kubectl )二进制文件,所以不用单独下载 kubernetes-client-linux-amd64.tar.gz 文件;

    将二进制文件拷贝到指定路径

    配置和启动 kube-apiserver

    创建 kube-apiserver 的 service 配置文件

    serivce 配置 /usr/lib/systemd/system/kube-apiserver.service 文件内容:

    /etc/kubernetes/config 文件的内容为:

    该配置文件同时被 kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy 使用。

    apiserver 配置 /etc/kubernetes/apiserver 文件内容为:

    --authorization-mode=RBAC 指定在安全端口使用 RBAC 授权模式,拒绝未通过授权的请求; kube-scheduler、kube-controller-manager 一般和 kube-apiserver 部署在同一台机器上,它们使用非安全端口和 kube-apiserver 通信; kubelet、kube-proxy、kubectl 部署在其它 Node 节点上,如果通过安全端口访问 kube-apiserver,则必须先通过 TLS 证书认证,再通过 RBAC 授权; kube-proxy、kubectl 通过在使用的证书里指定相关的 User、Group 来达到通过 RBAC 授权的目的; 如果使用了 kubelet TLS Boostrap 机制,则不能再指定 --kubelet-certificate-authority,--kubelet-client-certificate 和--kubelet-client-key 选项,否则后续 kube-apiserver 校验 kubelet 证书时出现 "x509: certificate signed by unknown authority" 错误; --admission-control 值必须包含 ServiceAccount ; --bind-address 不能为 127.0.0.1 ; runtime-config 配置为 rbac.authorization.k8s.io/v1beta1,表示运行时的 apiVersion ; --service-cluster-ip-range 指定 Service Cluster IP 地址段,该地址段不能路由可达; 缺省情况下 Kubernetes 对象保存在 etcd /registry 路径下,可以通过 --etcd-prefix 参数进行调整;

    完整 unit 见 kube-apiserver.service

    启动 kube-apiserver

    配置和启动 kube-controller-manager

    创建 kube-controller-manager 的 serivce 配置文件

    文件路径 /usr/lib/systemd/system/kube-controller-manager.service

    配置文件 /etc/kubernetes/controller-manager。

    --service-cluster-ip-range 参数指定 Cluster 中 Service 的 CIDR 范围,该网络在各 Node 间必须路由不可达,必须和 kube-apiserver 中的参数一致; --cluster-signing-* 指定的证书和私钥文件用来签名为 TLS BootStrap 创建的证书和私钥; --root-ca-file 用来对 kube-apiserver 证书进行校验,指定该参数后,才会在 Pod 容器的 ServiceAccount 中放置该 CA 证书文件; --address 值必须为 127.0.0.1,因为当前 kube-apiserver 期望 scheduler 和 controller-manager 在同一台机器,否则:

    参考: https://github.com/kubernetes-incubator/bootkube/issues/64

    完整配置见 kube-controller-manager.service

    启动 kube-controller-manager

    配置和启动 kube - scheduler

    创建 kube-scheduler 的 serivce 配置文件

    文件路径 /usr/lib/systemd/system/kube-scheduler.serivce。

    配置文件 /etc/kubernetes/scheduler。

    --address 值必须为 127.0.0.1,因为当前 kube-apiserver 期望 scheduler 和 controller-manager 在同一台机器;

    完整见: kube-scheduler.service

    验证 master 节点功能

    后记

    当时在配置过程中遇到了问题 TLS 认证相关的问题,其实就是因为配置 apiserver 时候 etcd 的协议写成了 http 导致的,应该是用 https。

    才云科技的唐继元分享过 Kubernetes Master High Availability 高级实践。究竟如何实现 Kubernetes master 的高可用还需要继续探索。

    原文链接: https://github.com/rootsongjc/kubernetes-handbook/blob/master/practice/master-installation.md

    专家有话说

    文章提到了 K8S master 节点上三个组件如何配置和部署,虽然我们在三台机器上都部署了 K8S master 三大组件,但是 3 大部署了 master 的机器如何体现高可用,又如何暴露给用户访问呢?其实,我们需要加一个 haproxy 作为 master 高可用的入口。那么无论 kubectl 还是 K8S node 上的 kubelet 要访问 apiserver,都通过 haproxy 间接访问,haproxy 实现了 master 的高可用和负载均衡。后续才云( Caicloud )会发一篇更具体的高可用方案,包含自动化部署脚本,让用户实现一键部署,敬请期待。

    才云技术经理 唐继元

    3 条回复    2017-09-18 00:02:49 +08:00
    caicloud2015
        1
    caicloud2015  
    OP
       2017-09-17 23:52:01 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1154 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 17:00 PVG 01:00 LAX 09:00 JFK 12:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86