本文主要说明kubernetes集群使用组建的版本和功能介绍。、

一、组件版本

  • Kubernetes 1.12.3
  • Docker 18.06.1-ce
  • Etcd 3.3.10
  • Flanneld 0.10.0
  • 插件:
    • Coredns
    • Dashboard
    • Heapster (influxdb、grafana)
    • Metrics-Server
    • EFK (elasticsearch、fluentd、kibana)
  • 镜像仓库:
    • docker registry
    • harbor

二、主要配置策略

kube-apiserver:

  • 使用 keepalived 和 haproxy 实现 3 节点高可用;
  • 关闭非安全端口 8080 和匿名访问;
  • 在安全端口 6443 接收 https 请求;
  • 严格的认证和授权策略 (x509、token、RBAC);
  • 开启 bootstrap token 认证,支持 kubelet TLS bootstrapping;
  • 使用 https 访问 kubelet、etcd,加密通信;

kube-controller-manager:

  • 3 节点高可用;
  • 关闭非安全端口,在安全端口 10252 接收 https 请求;
  • 使用 kubeconfig 访问 apiserver 的安全端口;
  • 自动 approve kubelet 证书签名请求 (CSR),证书过期后自动轮转;
  • 各 controller 使用自己的 ServiceAccount 访问 apiserver;

kube-scheduler:

  • 3 节点高可用;
  • 使用 kubeconfig 访问 apiserver 的安全端口;

kubelet:

  • 使用 kubeadm 动态创建 bootstrap token,而不是在 apiserver 中静态配置;
  • 使用 TLS bootstrap 机制自动生成 client 和 server 证书,过期后自动轮转;
  • 在 KubeletConfiguration 类型的 JSON 文件配置主要参数;
  • 关闭只读端口,在安全端口 10250 接收 https 请求,对请求进行认证和授权,拒绝匿名访问和非授权访问;
  • 使用 kubeconfig 访问 apiserver 的安全端口;

kube-proxy:

  • 使用 kubeconfig 访问 apiserver 的安全端口;
  • 在 KubeProxyConfiguration 类型的 JSON 文件配置主要参数;
  • 使用 ipvs 代理模式;

集群插件:

  • DNS:使用功能、性能更好的 coredns;
  • Dashboard:支持登录认证;
  • Metric:heapster、metrics-server,使用 https 访问 kubelet 安全端口;
  • Log:Elasticsearch、Fluend、Kibana;
  • Registry 镜像库:docker-registry、harbor;

三、系统初始化

1、主机名修改 vi /etc/hostname

2、本地hosts解析

[root@k8s-master1 ssl]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.4 etcd1
192.168.80.5 etcd2
192.168.80.6 etcd3
192.168.80.7 k8s-master1
192.168.80.8 k8s-master2
192.168.80.9 k8s-master3
192.168.80.10 k8s-node1
192.168.80.11 k8s-node2
192.168.80.12 k8s-node3

3、无密码ssh登陆其他节点,(k8s-master1上生成密钥)

[root@k8s-master1 ssl]# ssh-keygen -t rsa
[root@k8s-master1 ssl]# ssh-copy-id etcd1
[root@k8s-master1 ssl]# ssh-copy-id etcd2
[root@k8s-master1 ssl]# ssh-copy-id etcd3
[root@k8s-master1 ssl]# ssh-copy-id k8s-master1
[root@k8s-master1 ssl]# ssh-copy-id k8s-master2
[root@k8s-master1 ssl]# ssh-copy-id k8s-master3
[root@k8s-master1 ssl]# ssh-copy-id k8s-node1
[root@k8s-master1 ssl]# ssh-copy-id k8s-node2
[root@k8s-master1 ssl]# ssh-copy-id k8s-node3

4、关闭防火墙

sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo iptables -P FORWARD ACCEPT

5、关闭swap分区

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

6、关闭SELinux

sudo setenforce 0
grep SELINUX /etc/selinux/config
SELINUX=disabled

7、加载内核模块

sudo modprobe br_netfilter
sudo modprobe ip_vs

8、设置系统参数

cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
 sysctl -p /etc/sysctl.d/kubernetes.conf
  • tcp_tw_recycle 和 Kubernetes 的 NAT 冲突,必须关闭 ,否则会导致服务不通;
  • 关闭不使用的 IPV6 协议栈,防止触发 docker BUG;

9、检查系统内核和模块适不适合运行docker(Linux系统)

curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh
$ bash ./check-config.sh

四、环境介绍

ca-key.pem
ca.pem
flanneld-key.pem
flanneld.pem
kubelet-bootstrap.kubeconfig
kubelet-client-2018-12-20-20-10-59.pem
kubelet-client-current.pem
kubelet.config.json
kubelet.crt
kubelet.key
kubelet.kubeconfig
kube-proxy.config.yaml
kube-proxy.kubeconfig

 主机名  IP  需要的证书(/etc/kubernetes/cert)  运行的服务
 etcd1  192.168.80.4    ca-key.pem
etcd-key.pem
ca.pem
etcd.pem
etcd集群   
 etcd2  192.168.80.5
 etcd3  192.168.80.6
 k8s-master1  192.168.80.7    ca-key.pem
ca.pem
ca-config.json(←只生成证书的主机需要)
encryption-config.yaml
flanneld-key.pem
flanneld.pem
kube-controller-manager-key.pem
kube-controller-manager.kubeconfig
kube-controller-manager.pem
kubernetes-key.pem
kubernetes.pem
kube-scheduler.kubeconfig
~/.kube/config

kube-apiserver
kube-controller-manager
kube-scheduler

flanneld

 k8s-master2  192.168.80.8
k8s-master3   192.168.80.9
 k8s-node1  192.168.80.10 

ca-key.pem
ca.pem
flanneld-key.pem
flanneld.pem
kubelet-bootstrap.kubeconfig
kubelet-client-2018-12-20-20-10-59.pem
kubelet-client-current.pem
kubelet.config.json
kubelet.crt
kubelet.key
kubelet.kubeconfig
kube-proxy.config.yaml
kube-proxy.kubeconfig

docker

flannel

kubelet

kube-proxy

k8s-node2   192.168.80.11 
k8s-node3   192.168.80.12 
 cluster VIP  114.67.81.105     高可用VIP,负责调度apiserver 6443端口

下一篇我们正式开始搭建kubernetes集群所需要的组件,请参考:二进制搭建kubernetes多master集群【一、使用TLS证书搭建etcd集群】

二进制搭建kubernetes多master集群【开篇、集群环境和功能介绍】的更多相关文章

  1. 二进制搭建kubernetes多master集群【一、使用TLS证书搭建etcd集群】

    上一篇我们介绍了kubernetes集群架构以及系统参数配置,参考:二进制搭建kubernetes多master集群[开篇.集群环境和功能介绍] 下面本文etcd集群才用三台centos7.5搭建完成 ...

  2. 二进制搭建kubernetes多master集群【四、配置k8s node】

    上一篇我们部署了kubernetes的master集群,参考:二进制搭建kubernetes多master集群[三.配置k8s master及高可用] 本文在以下主机上操作部署k8s node k8s ...

  3. 二进制搭建kubernetes多master集群【三、配置k8s master及高可用】

    前面两篇文章已经配置好了etcd和flannel的网络,现在开始配置k8s master集群. etcd集群配置参考:二进制搭建kubernetes多master集群[一.使用TLS证书搭建etcd集 ...

  4. 二进制搭建kubernetes多master集群【二、配置flannel网络】

    上一篇我们已经搭建etcd高可用集群,参考:二进制搭建kubernetes多master集群[一.使用TLS证书搭建etcd集群] 此文将搭建flannel网络,目的使跨主机的docker能够互相通信 ...

  5. 二进制搭建Kubernetes集群(最新v1.16.0版本)

    目录 1.生产环境k8s平台架构 2.官方提供三种部署方式 3.服务器规划 4.系统初始化 5.Etcd集群部署 5.1.安装cfssl工具 5.2.生成etcd证书 5.2.1 创建用来生成 CA ...

  6. K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群

    0x00 概述 本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansi ...

  7. kubernetes系列:(一)、kubeadm搭建kubernetes(v1.13.1)单节点集群

    kubeadm是Kubernetes官方提供的用于快速部署Kubernetes集群的工具,本篇文章使用kubeadm搭建一个单master节点的k8s集群. 节点部署信息 节点主机名 节点IP 节点角 ...

  8. 二进制方式搭建Kubernetes集群

    环境准备: 演练暂时用单节点一台master和一台node节点来进行部署搭建(kubernetes 1.19版本) 角色 IP 组件 master 10.129.246.114 kube-apiser ...

  9. kubeadm搭建kubernetes集群之二:创建master节点

    在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...

随机推荐

  1. 【原】解决Debug JDK source 无法查看局部变量的问题方案(重新编译rt.jar包)

    一.问题阐述 首先我们要明白JDK source为什么在debug的时候无法观察局部变量,因为在jdk中,sun对rt.jar中的类编译时,去除了调试信息,这样在eclipse中就不能看到局部变量的值 ...

  2. 前端-HTML练习题

    本小节重点: 熟练使用div+span布局,知道div和span的语义化的意思 熟悉对div.ul.li.span.a.img.table.form.input标签有深刻的认知,初期也了解他们,知道他 ...

  3. VC 判断网络连接函数

    IsNetworkAlive Bool IsNetworkAlive( _Out_  LPDWORD lpdwFlags ); Header Sensapi.h Library Sensapi.lib ...

  4. MIME(Multipurpose Internet Mail Extensions-多用途互联网邮件扩展)

    MIME MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时 ...

  5. linux 中特殊符号用法详解

    # 井号 (comments)#管理员  $普通用户 脚本中 #!/bin/bash   #!/bin/sh井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行 ...

  6. inotify用法简介及结合rsync实现主机间的文件实时同步

    一.inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系 ...

  7. bash: ifconfig: command not found 问题解决

    ifconfig使用出现问题了?竟然提示找不到~~于是百度~~ [flymouse@localhost /]$ ifconfig 提示:“bash: ifconfig: command not fou ...

  8. Andriod Studio adb 安装应用

    原文链接:https://blog.csdn.net/u014608640/article/details/51833304 下面的命令安装.重新安装和卸载应用程序. 安装:adb -s HT9BYL ...

  9. 第八章 高级搜索树 (b5)B-树: 删除

  10. Python format 格式化函数。

    Python format 格式化函数  Python 字符串 Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能. 基本语法是通过 {} 和 ...