1.机器准备
机器准备 硬件需求 角色
虚拟机准备
准备四台虚拟机来测试,具体部署配置信息如下表所示:
主机名 角色
k8s-rancher 管理k8s集群
k8s-master k8s集群master节点, work节点,etcd节点
k8s-node1 k8s集群work节点, etcd节点
k8s-node2 k8s集群work节点, etcd节点
总体架构
概念:
K8s的物理架构是master/node模式:
K8s集群至少需要一个主节点(Master)和多个工作节点(Worker),Master节点是集群的控制节点,负责整个集群的管理和控制,主节点主要用于暴露API,调度部署和节点的管理。
1. Master 节点一般包括四个组件,apiserver、scheduler、controller-manager、etcd,他们分别的作用是:
Apiserver:上连其余组件,下接ETCD,提供各类 api 处理、鉴权,和 Node 上的 kubelet 通信等,只有 apiserver 会连接 ETCD。
Controller-manager:控制各类 controller,通过控制器模式,致力于将当前状态转变为期望的状态。
Scheduler:调度,打分,分配资源。
Etcd:整个集群的数据库,也可以不部署在 Master 节点,单独搭建。
2.Node 节点一般也包括三个组件,docker,kube-proxy,kubelet
Docker:具体跑应用的载体。
Kube-proxy:主要负责网络的打通,早期利用 iptables,现在使用 ipvs技术。
Kubelet:agent,负责管理容器的生命周期。
1.安装docker
1. 安装所需的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2.设置仓库,使用阿里官方源地址:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3. 安装 Docker Engine-Community
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
4. 启动docker
sudo systemctl start docker
5. 加入开机启机
sudo systemctl enable docker
前提条件
2.1关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
安装并启用Iptables
sudo yum install iptables-services
软件包安装完成后启动Iptables服务
sudo systemctl start iptables
2.2 关闭 SELinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
2.3 关闭swap:(K8S 1.8版本后必须关闭)
swapoff -a
sed -i 's/.swap./#&/' /etc/fstab
通过free查看swap开关情况
设置主机名
hostnamectl set-hostname <hostname>
如:hostnamectl set-hostname k8s-rancher
时区配置和时间同步
sudo yum -y install ntp ntpdate
ntpdate time.windows.com
检查每台服务器的machine-id
# 检查现有id值
cat /etc/machine-id
# 重新生成id值
rm -f /etc/machine-id && systemd-machine-id-setup
将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
# 加载br_netfilter模块
modprobe br_netfilter
# 查看是否加载
lsmod | grep br_netfilter
# 生效
sysctl --system
2. 安装rancher2.x
配置/etc/docker/daemon.json
tee << EOF > /etc/docker/daemon.json
{
"registry-mirrors":["https://m9r2r2uj.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload && systemctl restart docker
sudo docker pull rancher/rancher
sudo docker run -d --restart=unless-stopped --privileged --restart=unless-stopped \
-p 80:80 -p 443:443 \
rancher/rancher:stable
二、Rancher可视化管理
浏览器访问:
根据提示获取admin初始密码
docker logs container-id 2>&1 | grep "Bootstrap Password:"
访问地址:http://192.168.3.141
设置密码: admin/admin
设置语言: 右下角English改为“简体中文”
设置Rancher默认镜像仓库
把系统设置里面的
system-default-registry
value设置为registry.cn-hangzhou.aliyuncs.com
;
2..使用rancher创建k8s集群
在首页或者集群管理界面创建集群
-
选择自定义
这里我只填写了集群名称k8s-cluster,其他都是默认,然后下一步
点下一步
主节点三个全选–复制命令–在主节点执行
从节点,选Etcd和Worker在k8s-node1和k8s-node2节点上执行下面的命令
点击完成就行了,后面还可以查看这命令
在开发环境中,如果你删除了iptables中的docker链,或者iptables的规则被丢失了(例如重启firewalld),docker就会报iptables error例如:iptables: No chain/target/match by that name
解决办法:
重启docker服务,之后,正确的iptables规则就会被创建出来