准备工作
- 关闭swap
- 检查MAC地址和product_uuid
修改hosts文件
192.168.1.51
应该设置为虚拟ip
加载内核模块
- ip_vs: 用于实现负载均衡和高可用性。它通过在前端代理服务器上分发传入请求到后端实际服务器上,提供了高性能和可扩展的网络服务。
- ip_vs_rr: IPVS 的一种调度算法之一,使用轮询方式分发请求到后端服务器,每个请求按顺序依次分发。
- ip_vs_wrr: IPVS 的一种调度算法之一,使用加权轮询方式分发请求到后端服务器,每个请求按照指定的权重比例分发。
- ip_vs_sh: IPVS 的一种调度算法之一,使用哈希方式根据源 IP 地址和目标 IP 地址来分发请求。
- nf_conntrack: 用于跟踪和管理网络连接,包括 TCP、UDP 和 ICMP 等协议。它是实现防火墙状态跟踪的基础。
- ip_tables: 提供了对 Linux 系统 IP 数据包过滤和网络地址转换(NAT)功能的支持。
- ip_set: 扩展了 iptables 的功能,支持更高效的 IP 地址集合操作。
- xt_set: 扩展了 iptables 的功能,支持更高效的数据包匹配和操作。
- ipt_set: 一个用户空间工具,用于配置和管理 xt_set 内核模块。
- ipt_rpfilter: 用于实现反向路径过滤,用于防止 IP 欺骗和 DDoS 攻击。
- ipt_REJECT: 一个 iptables 目标,用于拒绝 IP 数据包,并向发送方发送响应,指示数据包被拒绝。
- ipip: 用于实现 IP 封装在 IP(IP-over-IP)的隧道功能。它可以在不同网络之间创建虚拟隧道来传输 IP 数据包。
修改内核参数
- net.ipv4.ip_forward=1: 允许服务器作为网络路由器转发数据包
- vm.overcommit_memory=1: 该设置允许原始的内存过量分配策略,当系统的内存已经被完全使用时,系统仍然会分配额外的内存。
- vm.panic_on_oom=0: 当系统内存不足(OOM)时,禁用系统崩溃和重启。
- fs.inotify.max_user_watches=89100: 设置系统允许一个用户的inotify实例可以监控的文件数目的上限。
- fs.file-max=52706963: 设置系统同时打开的文件数的上限。
- fs.nr_open=52706963: 设置系统同时打开的文件描述符数的上限。
- net.netfilter.nf_conntrack_max=2310720: 置系统可以创建的网络连接跟踪表项的最大数量。
- net.ipv4.tcp_keepalive_time=600: 设置TCP套接字的空闲超时时间(秒),超过该时间没有活动数据时,内核会发送心跳包。
- net.ipv4.tcp_keepalive_probes=3: 设置未收到响应的TCP心跳探测次数。
- net.ipv4.tcp_keepalive_intvl=15: 设置TCP心跳探测的时间间隔(秒)。
- net.ipv4.tcp_max_tw_buckets=36000: 设置系统可以使用的TIME_WAIT套接字的最大数量。
- net.ipv4.tcp_tw_reuse=1: 启用TIME_WAIT套接字的重新利用,允许新的套接字使用旧的TIME_WAIT套接字。
- net.ipv4.tcp_max_orphans=327680: 设置系统可以同时存在的TCP套接字垃圾回收包裹数的最大数量。
- net.ipv4.tcp_orphan_retries=3: 设置系统对于孤立的TCP套接字的重试次数。
- net.ipv4.tcp_syncookies=1: 启用TCP SYN cookies保护,用于防止SYN洪泛攻击。
- net.ipv4.tcp_max_syn_backlog=16384: 设置新的TCP连接的半连接数(半连接队列)的最大长度。
- net.ipv4.ip_conntrack_max=65536: 设置系统可以创建的网络连接跟踪表项的最大数量。
- net.ipv4.tcp_timestamps=0: 关闭TCP时间戳功能,用于提供更好的安全性。
- net.core.somaxconn=16384: 设置系统核心层的连接队列的最大值。
- net.ipv6.conf.all.disable_ipv6=0: 启用IPv6协议。
- net.ipv6.conf.default.disable_ipv6=0: 启用IPv6协议。
- net.ipv6.conf.lo.disable_ipv6=0: 启用IPv6协议。
- net.ipv6.conf.all.forwarding=1: 允许IPv6数据包转发。
安装运行时
containerd
- 下载
- 安装
- 设置systemd服务
- 安装runc
runc
- 安装cri
cri
- 开启containerd
安装ipvsadm
主节点安装
以k8s-master01
为例, apiserver的统一入口设置为k8s-apiserver
安装ectd
etcd
安装Kubernetes组件
生成etcd证书
etcd证书存放目录/etc/kubernetes/pki/etcd
生成etcd的ca证书
生成server
证书用于etcd的server端
生成peer
证书用于etcd服务端之间的通信
生成kube-apiserver-etcd-client
证书用于kube-apiserver访问etcd
生成Kubernetes的证书
Kubernetes证书存放目录/etc/kubernetes/pki
生成Kubernetes的CA证书
生成apiserver证书用于apiserver服务端
将service_cluster_ip_range
的ip段的第一个ip加入证书中,如10.10.0.1
.
生成apiserver-kubelet-client证书用于kubelet与apiserver通信
生成kube-controller-manager证书用于kube-controller-manager与apiserver通信
生成kube-scheduler证书用于kube-scheduler与apiserver通信
生成kube-proxy证书用于kube-proxy与apiserver通信
生成admin证书用于admin与apiserver通信
生成front-proxy的CA
签发front-proxy-client证书
生成ServiceAccount Key
文件树
生成kubeconfig文件
生成controller-manager.conf
生成scheduler.conf
生成admin.conf
生成kube-proxy.conf
生成bootstrap-kubelet.conf
文件树
设置systemd服务
生成etcd服务
生成kube-apiserver服务
生成kube-controller-manager服务
生成kube-scheduler服务
生成kubelet服务
生成/etc/kubernetes/kubelet-conf.yaml
配置文件
生成kube-proxy服务
生成/etc/kubernetes/kube-proxy.yaml
启动主节点
设置TLS bootstrapping
bootstrapping.yaml
启动kubelet
配置节点
复制admin.config
查看证书kubelet证书申请
同意其中的证书申请
安装CoreDNS
安装helm
安装CoreDNS的helm仓库
安装coredns
安装网络插件
flannel
flannel
修改Network
为podCIDR,如10.11.0.0
, 安装flannel
工作节点安装
复制文件
/etc/kubernetes/pki/ca.crt
/etc/kubernetes/bootstrap-kubelet.conf
安装Kubernetes组件
启动systemd服务
生成kubelet服务
生成/etc/kubernetes/kubelet-conf.yaml
配置文件
生成kube-proxy服务
生成/etc/kubernetes/kube-proxy.yaml