硬件环境
序号 | 硬件 | 要求 |
---|---|---|
1 | cpu | 至少2核 |
2 | 内存 | 至少3G |
3 | 硬盘 | 至少40G |
集群节点
主机名 | IP |
---|---|
master | 192.168.66.100 |
node1 | 192.168.66.101 |
软件环境
软件 | 版本 |
---|---|
操作系统 | CentOS Linux release 7.5.1804 (Core) |
Kubernetes | 1.23 |
操作系统内核 | 4.x以上 |
1、VMware安装
2、虚拟机创建
3、网络配置
1. 配置网关
注意点击右下角管理员运行
2. 配置虚拟机ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# dncp为动态ip,开关机会发生变化,static为静态ip,永久不变
BOOTPROTO=static
# 修改为开机自启动网卡
ONBOOT=yes
# 添加配置ip
# 另一台配置 IPADDR=192.168.66.101
IPADDR=192.168.66.100
# 子网掩码
NETMASK=255.255.255.0
# 网关
GATEWAY=192.168.66.1
# 配置阿里的 DNS 服务
DNS1=223.5.5.5
DNS2=223.6.6.6
重启网卡
service network restart
3. 配置 vmware8 网卡
4. 验证是否配置成功
4、配置阿里云yum源
步骤4-7设置可以通过 xshell 工具一键发送命令到所有连接,不用一个一个机器节点去配置,或者 配置好一台虚拟机之后通过VMware的克隆功能创建一台一摸一样的机器(注意修改ip)
# 1.下载安装wget
yum install -y wget
# 2.备份默认的yum
mv /etc/yum.repos.d /etc/yum.repos.d.backup
# 3.设置新的yum目录
mkdir -p /etc/yum.repos.d
# 4.下载阿里yum配置到该目录中,选择对应版本
wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo
# 5.更新epel源为阿里云epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 6.重建缓存
yum clean all
yum makecache
# 7.看一下yum仓库有多少包
yum repolist
# 8.更新软件包为最新版本
yum update
5、升级系统内核
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 检查启动项
grep initrd16 /boot/grub2/grub.cfg
grub2-set-default 0
# 重启机器
reboot
# 检查操作
# 查看系统内核
uname -r
uname -a
# 查看cpu
lscpu
# 查看内存
lscpu
# 查看硬盘信息
fdisk -l
6、Centos 配置
1. 关闭防火墙(开发环境下关闭用于学习,生产环境不要关闭)
# 关闭防火墙
systemctl stop firewalld
# 设置开机禁用
systemctl disable firewalld
# 关闭 linux 内核安全的权限
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
2. k8s 系统默认使用的是 iptables,需添加一些 ip 信息的过滤规则
# 添加网桥过滤和地址转发功能
vi /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"
3. k8s 集群要确保时间同步保证各节点通信正常
#安装软件
yum -y install ntpdate
#向阿里云服务器同步时间
ntpdate time1.aliyun.com
#删除本地时间并设置时区为上海
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#查看时间
date -R || date
4. 配置 hosts 地址,后续可通过名称访问 ip 地址
vi /etc/hosts
#添加如下内容
192.168.66.100 k8s-master
192.168.66.101 k8s-node1
5. 禁用 swap 分区(k8s 官网推荐)
#临时关闭
swapoff -a
#注释掉下面的设置(永久关闭)
vi /etc/fstab
/dev/mapper/centos-swap swap
#确认关闭:若swap行都显示 0 则表示关闭成功
free -m
7、Docker 安装
# 检查是否已经安装 yum-utils
yum list | grep yum-utils
# 安装yum工具包和存储驱动
yum install -y yum-utils
# 推荐使用国内的,阿里云docker镜像
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# docker-ce 社区版,docker-ee是企业版
yum install docker-ce docker-ce-cli containerd.io
# 启动 dokcer
systemctl start docker
# 查看 docker 版本
docker -v
docker info
# 设置开机自启动
systemctl enable docker && systemctl start docker
# Centos 和 Docker 对进程资源分配的方式不一致,会导致集群初始化失败,该文件将 Dokcer 改为和Centos一致
# Centos:systemd
# Docker:cgroupfs
# registry-mirrors -- 自己去阿里云生成的自己的镜像加速器的地址替换
echo '{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://b0jf9vxt.mirror.aliyuncs.com"]
}' > /etc/docker/daemon.json
#
systemctl daemon-reload
systemctl restart docker
8、搭建 k8s 集群
1. 准备工作
# K8s镜像切换成国内源
vi /etc/yum.repos.d/kubernetes.repo
# 粘贴以下内容
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
# 更新缓存
yum clean all
yum -y makecache
# 安装kubeadm、kubelet和kubectl
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
# 设置kubelet开机启动
systemctl enable kubelet
2. 部署 k8s
master 节点执行以下命令
# kubeadm init -- 初始化 k8s 集群网络命令
# apiserver-advertise-address -- master 节点主机 ip 地址
# image-repository -- 镜像仓库地址
# kubernetes-version -- k8s 版本
# service-cid -- service 服务的虚拟 ip,通过此 ip 从集群外部访问集群内部应用
# pod-network-cidr -- pod 网络地址,及集群内部的虚拟 ip
# ignore-preflight-errors -- 忽略预检错误
kubeadm init \
--apiserver-advertise-address=192.168.66.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
执行完成后会生成以下类似的文字,复制下来去工作节点执行,将工作节点加入到集群中
# ip 为master节点的 ip 地址
# token 有效期24小时, 过期需重新生成
# 响应打印 This node has joined the cluster 即执行成功
kubeadm join 192.168.66.100:6443 --token lcsn25.xl3q6w71dc2t9c8l --discovery-token-ca-cert-hash sha256:2eefc9c5acf3c331b45198f5e43642fcf3b9b2083dc49fa8659ecc5a5363d886
# 生成 token
kubeadm token create --print-join-command
创建文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
master 节点执行以下命令查看节点配置是否成功
kubectl get nodes
若报错 “The connection to the server localhost:8080 was refused - did you specify the right host or port?” ,是因为kubectl命令需要使用kubernetes-admin来运行,需要admin.conf文件(conf文件是通过“ kubeadmin init”命令在主节点/etc/kubernetes 中创建),但是从节点没有conf文件,也没有设置 KUBECONFIG =/root/admin.conf环境变量,所以需要复制conf文件到从节点,并设置环境变量就OK了
# 将主节点(master)中的“/etc/kubernetes/admin.conf”文件拷贝到从节点相同目录下
# 从节点设置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
# 重新生效环境变量
source ~/.bash_profile
3. 部署容器网络
k8s 通过Calico数据中心网络方案实现容器的互联互通,配置文件下载 calico.yaml,将 CALICO_IPV4POOL_CIDR 改成第二步中pod-network-cidr的值,在master执行
kubectl apply -f calico.yaml
该过程会在node节点下载很多和Calico相关的网络镜像并启动容器
# master 节点执行,显示node状态为ready就好了
kubectl get nodes
4. 检查 pod 状态(状态不太对,问题待解决)
# k8s默认master节点不分配pod资源,以下命令去除所有污点
kubectl taint nodes --all node-role.kubernetes.io/master-