0 序
- 先说我个人对当前ICT行业技术演进趋势的最大定论:大数据/云计算(云原生)/AI时代,K8s/docker在现在和未来都必将是云里头最重要的基础设施之一。
- docker 自己玩了很久;在公司里,k8s集群、rancher也用了几年了。
- docker / docker compose / k8s的架构、设计理念等,也均有所涉猎。
感兴趣的朋友,可拉到文章底部【推荐文献】查阅。
- 唯一的遗憾是,自己从没有动手安装部署过 k8s。
- 这不,最近在研究云边协同架构,不得不倒逼着我要亲手来安装一次 k8s 了。
目前已安装 ok 了,本文做个完整的总结。
1 Kubernetes 安装部署指南
1.1 前置工作与注意事项
部署规划
IPRoleHostnameresourceRemark172.16.1.72master 和 node2c , 4g, 10GB(个人建议至少2c,2g)k8s-master-1资源有限,此台机器同时作为 master 和 node 节点
- cpu : x86-64
- os : centos 7.9
- docker : 26.1.4
也可换为其他的容器运行时(Container runtime)
- k8s : 1.25.0 ≥ 1.24.0 (docker 涉及适配 CRI-O)
安装过程中涉及安装的3大命令模块: kubelet / kubeadm / kubectl
Kubernetes 架构 - kubernetes.io
from https://cloud.tencent.com/developer/article/1525487
- kubeEdge : 1.16.6 [x/本文不涉及]
机器配置
- 要求:2c 2g 20g 以上
- cpu 至少为2核,否则k8s初始化无法成功。
- 内存 建议master节点内存给4g
操作系统
- CENTOS 7.9
- 不同版本的系统对k8s影响较大,具体看实际情况而定。 有的还需要更新系统内核
hosts / hostname
- vim /etc/hosts
- 172.16.1.72 k8s-master-1 k8s-slave-1
复制代码1台机器 1行 host 配置
○ 每台机器都需配置,这里我们以 172.16.1.72 为例,我们需要设置hostname为 “k8s-master-1” ,与hosts 相匹配。
○ 如果不配置hostname 默认会配置为 localhost.localdomain ,k8s 运行时会报错Error getting node" err="node \"localhost.localdomain\" not found
- # 设置当前机器的hostname
- hostnamectl set-hostname k8s-master-1
- # 查看当前机器hostname
- hostname
复制代码
- ping k8s-master-1
- ping k8s-slave-1
复制代码 其他注意事项
- 使用minikube安装单节点集群,用于测试
- 采用工具kubeadm – 我们使用的这种方式(开发环境,机器比较少(几十台以下))
- 使用kubespray, google官方提供的工具
- 全手动: 二进制安装(运维)
- 全自动安装: rancher、kubesphere (大型生产环境,百台,万台机器)
- k8s health会依赖一些端口,为了不出现网络问题,我们在虚拟机(master)中开放以下端口:
- ca 证书:帮助我们安装的ca 证书时限是一年,所以不推荐正式环境使用,或需要手动配置ca证书。
1.2 安装步骤
1.2.1 初始准备 [master + node]
设置 hostname
- # 设置当前机器的hostname
- hostnamectl set-hostname k8s-master-1
- # 查看当前机器hostname
- hostname
复制代码 基础依赖包的安装
- # 基础依赖包安装
- yum -y install wget vim net-tools ntpdate bash-completion
复制代码 系统时钟同步
- # 向阿里云服务器同步时间
- ntpdate time1.aliyun.com
- # 删除本地时间并设置时区为上海
- rm -rf /etc/localtime
- ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- # 查看时间
- date -R || date
复制代码 关闭防火墙、selinux
- systemctl stop firewalld
- systemctl disable firewalld
- # 临时关闭
- setenforce 0
- # 永久关闭
- sed -i 's/enforcing/disabled/' /etc/selinux/config
复制代码 关闭 swap
K8S 不能使用swap
- # 临时关闭Swap
- swapoff -a
- # 修改 /etc/fstab 删除或者注释掉swap的挂载,可永久关闭swap
- sed -i '/swap/s/^/#/' /etc/fstab
- # 修改完后我们检测一下,看最后一行swap 都是0 就成功了
- free -m
- #----------------start----------------------
- total used free shared buff/cache available
- Mem: 1837 721 69 10 1046 944
- Swap: 0 0 0
- #-----------------end---------------------
复制代码 网桥过滤
- # 网桥过滤
- vim /etc/sysctl.conf
- net.bridge.bridge-nf-call-ip6tables = 1
- net.bridge.bridge-nf-call-iptables = 1
- net.bridge.bridge-nf-call-arptables = 1
- net.ipv4.ip_forward=1
- net.ipv4.ip_forward_use_pmtu = 0
- # 生效命令
- sysctl --system
- # 查看效果
- sysctl -a|grep "ip_forward"
复制代码 开启ipvs
- kubernetes 1.8版本开始,新增了kube-proxy对ipvs的支持,性能和追踪问题比iptable强
此步骤为选填项,如果不执行那么默认使用iptables
- # 安装IPVS
- yum -y install ipset ipvsdm
- # 编译ipvs.modules文件
- vi /etc/sysconfig/modules/ipvs.modules
- # 文件内容如下
- #!/bin/bash
- modprobe -- ip_vs
- modprobe -- ip_vs_rr
- modprobe -- ip_vs_wrr
- modprobe -- ip_vs_sh
- modprobe -- nf_conntrack_ipv4
- # 赋予权限并执行
- chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&lsmod | grep -e ip_vs -e nf_conntrack_ipv4
- # 重启电脑,检查是否生效
- reboot
- lsmod | grep ip_vs_rr
复制代码 修改hosts
添加 dns 解析
- vim /etc/hosts
-
- 172.16.1.72 k8s-master-1 k8s-slave-1
复制代码 1.2.2 Docker 安装 [master + node]
docker 换源
- # 安装yum utils ( 安装 yum-config-manager 命令 )
- yum install -y yum-utils
- # yum docker-ce config 换源
- #yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- ls -la /etc/yum.repos.d/
复制代码 安装docker
- # 安装 docker (亦可指定版本)
- yum -y install docker-ce docker-ce-cli containerd.io
- # 启动docker, enable 为必须,k8s会检测docker.service
- systemctl enable docker && systemctl start docker
复制代码 配置镜像加速
[code]# 创建docker目录mkdir -p /etc/docker# 设置镜像源, exec-opts必须指定否则k8s启动报错(cgroup、systemd)tee /etc/docker/daemon.json |