二、实践指南

1、安装
yum install kubernates        ------ all -in -one hyperkube
https://github.com/kubernates/kubernates/releases下载  kubernates包
Master节点 : etcd \ kube-apiserver \ kube-controller-manager \ kube-scheduler进程
Slave Node:  kubelet 、 kube-proxy程序运行
2、配置
.  通信服务所有端口的防火墙配置, 或者关闭防火墙  systemctl disable 、stop  firewalld
.  复制可执行文件到/usr/bin(systemd默认路径),对服务配置
.  etcd 首先安装启动, etcd/etcdctl复制到 /usr/bin下 并配置systemd文件【/usr/lib/systemd】/system/etcd.service。 systemctl daemond-reload/enable etcd.service/start etcd.service  通过etcdctl cluster-health验证
.  kube-apiserver :复制可执行文件到/usr/bin,编辑systemd文件 ./system/kube-apiserver.service 。修改配置文件启动参数/etc/kubernates/apiserver  KUBE_API_ARGS(见下)
.  kube-controller-manager:编辑systemd文件,依赖apiserver服务。启动参数 KUBE_CONTROLLER_MANAGER_ARGS位于配置文件中 /etc/kubernetes/contorller-manager中
.  kube-schedule : 依赖apiserver服务,编辑systemd文件system/scheduler.service。启动参数KUBE_SCHEDULER_ARGS位于 /etc/kubernetes/scheduler
.  分别打开三个服务,并启动,通过status 结果running验证启动成功
.- Node 节点应该先安装DOcker  Daemon服务
.- Node 节点kubelet 。依赖docker, 编辑systemd文件,  kubelet.service 。启动参数 KUBELET_ARGS 位于 /etc/kubernestese/kubelet中
.- Node 节点kube-proxy 。 依赖于network服务。After=network.target  Requires =network.service。 启动参数 KUBE_PROXY_ARGS位于 ...../proxy
.  分别打开并启动上两个节点服务。通过kubectl get nodes验证节点注册成功。集群完成。

KUBE_API_ARGS:
--etcd_servers:   制定etcd服务地址
--instance-bin-address : apiserver绑定所有的非安全IP地址,0。0.0.0表示所有
--insecure-port: apiserver绑定主机的非安全端口号,8080默认
--service-cluster-ip-range: IP地址段范围,CIDR格式表示不能与物理机真实IP端重合
--service-node-port-range: Service可映射的竌顿口范围, 默认30000 ~ 32767
--admission_controll: 准入控制设置,各控制模块伊插件的形式一次生效
--logtostderr:设置为false表示日志写入文件,不写则stderr
--log-dir: 日志目录           --v日志级别

KUBE_CNOTROLLER_MANAGER_ARGS:
--master: 制定apiserver的URL地址ip+port
--logtostderr:  设为false表示写入文件
--log-dir 日志目录。    --v 日志级别

KUBE_SCHEDULER_ARGS:
--master : 指定apiserver地址 : ip+ port
--logtostderr: 设置false写入文件
--log-dir:  日志目录
--v:  日志级别

KUBELET_ARGS:
--api-servers:指定apiserver地址,还可以多个
--pod_infra_container_image=gcr.io/google_containers/pause_amd64:3.0 指定谷歌pause容器
--hostname-override:设置本node节点的名称。
--logtostderr:设置false,表示将日志写入文件,不写入stderr
--log-dir: 日志目录       --v:  日志级别

KUBE_PROXY_ARGS:
--master :指定apiserver地址
--logtostderr: 设置写入流还是日志文件
--log-dir: 设置日志目录,         --v:日志级别


3、安全配置
-  基于ca 签名的双向数字证书认证
    为kube-apiserver 生成一个证书,并用ca 证书进行签名。
    为kube-apiserver配置证书相关(CA证书、CA签名后的证书及私钥)的启动参数
    为每个访问者服务(controller\scheduler\kubelet..等)生成证书,CA签名后,启动参数对应配置相关证书(通kube-apiserver)
    使用kubectl对集群操作使,增加参数 --certificate-authority\  --client-certificate \ --client-key表示用CA授权的证书, 客户端证书、客户端密钥
   如: kubectl get nodes
          kubectl       【  --server=https://k8s-master:443    --certificate-authority=/etc/kubenetes/ssl_keys/ca.crt   --client-certificate/etc/kubernetes/ssl_keys/cs_client.crt
                               --client-key=/etc/kubernetes/ssl_keys/cs_client.key   】        get nodes
    (详细略)      

-  基于HTTPS BASE或者tocken的简单认证方式
    创建用户、密码和UID文件basic_auth_file, 明文。
    设置kube-apiserver启动参数 --basic_auth_file=${path}   --secure-port=443
    访问: kubectl   【--server=https://ip:443   --username=admin  ---password=admin   --insecure-skip-tls-verify=true 】    get  pods
    基于token :  设置用户、密码文件token_auth_file,  设置启动参数 --token_auth_file  --secure_port=443, 启动api-server,
                用curl访问:  curl  -k  --header “Authorization:Bearer admin” https://ip:443/version
   
4、版本升级:(对各个node隔离, 容器全部执行完成在更新node 上两个服务,所有node完成后,在master服务)
5、内网中的相关配置:公有GCE\ AWS(安全原因)0,  
-    安装私有镜像库(Docker Private Registry):  docs.docker.com/registry/deploying/
-    需要从https://gcr.io中下载google_containers/pause这个共用POD镜像,在push到私有镜像库中
-    kubelet的启动参数上加  --pod_infra_container_image=gcr.io/google_containers/pause-amd64:3.0指定为私有的DOcker Register中的puase镜像地址,重启kubelet服务
6、核心服务配置详解。  
-  公共配置参数,适用于各个服务: 设置log输出的各类参数
-  kube-apiserver:  配置准入规则,过滤请求、对集群成员广播配置、容器运行权限、tocken响应、安全访问模式、认证授权模式、证书跨域、etcd安全连接文件
-  kube-controller-manager:server地址、云服务上属性、并发的Deployement\Endpoint\namespace\RC \Replica set\ resource等数量、通信时间间隔、缓存大小等、节点失败POD数量各种控制、垃圾、第三方插件、发送apiserver请求时间间隔、请求数量类容、选举过程中的等待、同步时间间隔、润徐启动最大时间、时间间隔、性能资源相关的配置
-  kube-scheduler:主机ip监听地址、调度算法策略、性能分析、亲和力参数、每秒发送请求内容/数量、选举过程时间间隔
-  kubelete  启动参数: 网络权限DNS等、docker服务启动相关、数据采集性能分析、对POD使用宿主机的资源等、镜像操作、node存活验证等
-  kube-proxy启动参数: 主机绑定地址、从APIserver更新的时间间隔、NAT最大连接数、TCP连接超时间、服务监听的端口、代理防火墙空闲连接等等

7、多节点集群网络配置方案 : 网络设置工具  flannel\ open vSwitch\  Weave \ Calico或者直接路由实现夸主机的容器间网络互通
flannel(覆盖网络):
——采用overlay network完成网络打通, 使用etcd作为数据库、需要预先安装etcd
——安装flannel , 每个node上安装flannel, 解压后将flanneld和mk-docker-opts.sh复制到 /usr/bin目录下,即可完成flannel的安装
——配置flannel:systemd文件flanneld.service /  配置文件(etc/systemconfi/flannel文件>etcd | etcd_key)  
——etcd中添加一套网络配置记录,用于分配各docker虚拟IP段 (etcdctl set /coreos.com/network/config '{ "Network":"10.1.1.0/18" }')
——flannel将覆盖docker0网桥, 所以如果DOCker 已启动,需重启。
——启动flannel服务, systemctl restart  flanneld
——设置docker0网桥的IP地址, flannel0~docker0 的,重启docker服务

Open vSwitch(虚拟交换机):2node
——在两个node上安装OVS(yum install openvswitch),
——禁止selinux,配置后重启linux,节点上分别查看状态存在  ovsdb-server / ovs-vswitchd两个进程,确认日志正常more  /var/log/messages |grep openv
——创建网桥GRE隧道, 是不同节点的docker0网段互通(GRE 隧道数N个节点需要建立N(N-1)个,点对点通信)
    每个node上建立br0网桥  : ovs-vsctl  add-br   br0
    创建GRE隧道连接对端  :        ovs-vsctl add-port  br0 gre1   --set interface gre1  type=gre   option:   remote_ip=192.168.18.128
    最后把br0作为一个端口连接到docker0这个linux网桥上) :   brctl  addif docker0  br0
    启动br0和docker0网桥  ip link set dev br0 / docker0 up   
    添加路有规则,每个node都需, ip route add 172.17.0.0/16  dev docker0,
    每个节点都执行: 情况docker0自带的Iptables规则及linux规则,iptables -t   nat -F ; iptables -F  强制icmp报文通过    
    配置完后查看 Ip  addr查看ip  docker0的ip等路由信息
——两个Node容器之间的互通测试, 从一个节点上ping另一个节点的docker0的IP,验证互通性。
——tshark来验证流量走向GRE报文(tshark -i  br0/eth0 -R ip proto GRE)如果br0没有而eth0有流量,则说明GRE在承载网的物理网上完成封包过程。则搭建成功

直接路由:
——每个node添加其他Node上【Docker0网桥】的静态路由规则,既可以网桥互联
      route add -net 10.1.20.0 netmask  255.255.255.0 gw  192.168.1.129
      ping  其中一个任一个Node的docker0网桥IP 。通即可,可借助软件Quagga,每个Node安装或者docker方式启动

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐