二进制搭建kubernetes多master集群【开篇、集群环境和功能介绍】
本文主要说明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 flanneld |
| k8s-master2 | 192.168.80.8 | ||
| k8s-master3 | 192.168.80.9 | ||
| k8s-node1 | 192.168.80.10 |
ca-key.pem |
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集群【开篇、集群环境和功能介绍】的更多相关文章
- 二进制搭建kubernetes多master集群【一、使用TLS证书搭建etcd集群】
上一篇我们介绍了kubernetes集群架构以及系统参数配置,参考:二进制搭建kubernetes多master集群[开篇.集群环境和功能介绍] 下面本文etcd集群才用三台centos7.5搭建完成 ...
- 二进制搭建kubernetes多master集群【四、配置k8s node】
上一篇我们部署了kubernetes的master集群,参考:二进制搭建kubernetes多master集群[三.配置k8s master及高可用] 本文在以下主机上操作部署k8s node k8s ...
- 二进制搭建kubernetes多master集群【三、配置k8s master及高可用】
前面两篇文章已经配置好了etcd和flannel的网络,现在开始配置k8s master集群. etcd集群配置参考:二进制搭建kubernetes多master集群[一.使用TLS证书搭建etcd集 ...
- 二进制搭建kubernetes多master集群【二、配置flannel网络】
上一篇我们已经搭建etcd高可用集群,参考:二进制搭建kubernetes多master集群[一.使用TLS证书搭建etcd集群] 此文将搭建flannel网络,目的使跨主机的docker能够互相通信 ...
- 二进制搭建Kubernetes集群(最新v1.16.0版本)
目录 1.生产环境k8s平台架构 2.官方提供三种部署方式 3.服务器规划 4.系统初始化 5.Etcd集群部署 5.1.安装cfssl工具 5.2.生成etcd证书 5.2.1 创建用来生成 CA ...
- K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群
0x00 概述 本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansi ...
- kubernetes系列:(一)、kubeadm搭建kubernetes(v1.13.1)单节点集群
kubeadm是Kubernetes官方提供的用于快速部署Kubernetes集群的工具,本篇文章使用kubeadm搭建一个单master节点的k8s集群. 节点部署信息 节点主机名 节点IP 节点角 ...
- 二进制方式搭建Kubernetes集群
环境准备: 演练暂时用单节点一台master和一台node节点来进行部署搭建(kubernetes 1.19版本) 角色 IP 组件 master 10.129.246.114 kube-apiser ...
- kubeadm搭建kubernetes集群之二:创建master节点
在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...
随机推荐
- three3D地图设置两点之间的连线
点:可以用THREE.Vector3D来表示 现在来看看怎么定义个点,假设有一个点x=4,y=8,z=9.你可以这样定义它: var point1 = new THREE.Vecotr3(4,8,9) ...
- vue-cli 3.0之跨域请求代理配置及axios路径配置
vue-cli 3.0之跨域请求代理配置及axios路径配置 问题:在前后端分离的跨域请求中,报跨域问题 配置: vue.config.js: module.exports = { runtimeCo ...
- mysql 自动执行事件
首先配置mysql的配置文件my.ini, 加上event_scheduler = 1 开启自动执行事件配置 demo drop event event_test; CREATE EVENT ev ...
- 五种方法实现Java的Singleton单例模式
面试的时候经常会问到Java的单例模式,这道题能很好的考察候选人对知识点的理解程度.单例模式要求在系统运行时,只存在唯一的一个实例对象. 下面我们来详细剖析一下其中的关键知识点,并介绍五种实现方法,以 ...
- 12 python json&pickle&shelve模块
1.什么叫序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes(字节) 2.用于序列化的两个模块,json和pickle ...
- box2d 计算下一帧的位置/角度
var dt:Number=1/30; var y0:Number=_body.GetPosition().y; var y:Number=y0+_body.GetLinearVelocity().y ...
- 如何在Oracle中建立表和表空间?
1.建表空间 ORACLE中,表空间是数据管理的基本方法,所有用户的对象要存放在表空间中,也就是用户有空间的使用权,才能创建用户对象.否则是不充许创建对象,因为就是想创建对象,如表,索引等,也没有地方 ...
- Jstl标签<c:forEach>的用法
<c:forEach>除了支持数组之外,还有标准J2SE的集合类型,例如:ArrayList.List.LinkedList.Vector.Stack和Set 等等:另外还包括java.u ...
- 常见jsp跳转总结
这次做项目,用到几种不同的JSP跳转的方式,在此总结5中常用方法. 常用的跳转方式有以下几种: (1)href超链接标记,属于客户端跳转 (2)使用javascript完成,属于客户端跳转 (3)提交 ...
- Web标准:二、一列布局
知识点: 1.一列固定宽度 2.一列固定宽度居中 3.一列自适应宽度 4.一列自适应宽度居中 5.一列二至多块布局 1)一列固定宽度 下图是定义了一个高300px,宽400px,颜色是#99FFc ...