文章目录
说明
文档地址
- 官方文档:https://kubernetes.io/zh/docs/home/
- k8s操作文档:https://kubernetes.io/zh/docs/reference/kubectl/overview/
- kubectl操作命令文档:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
建议及其他说明:
- 在关键点配置完成后将虚拟机做一下备份,方便出现异常时回退。
- 文中部分操作命令均来自官方,在文中有标记官方文档说明的地方,建议配合官方文档使用。
一、环境准备
1. 配置主机网络
主机网络地址设定为192.168.56.1,以后所有虚拟机IP均为192.168.56.***
后续在配置虚拟机时会使用两块网卡,一块用于外网(NAT)、一块用于内网(host-only)
以上主机网络地址就是用于内网使用
2. 配置磁盘空间
用于存储虚拟机文件。
点击左上角VirtualBox–>偏好设置–>默认虚拟电脑位置
Mac没有分区概念所以按照自己需求填写即可,Windows需要放在磁盘空闲大的盘符。
3. 安装虚拟机配置网络
安装虚拟机、配置网络步骤可以查看此博客
分别配置三台(可以配置一台,其他的直接复制即可,复制完修改静态IP地址),主机名在下一步有设置,可忽略
默认网卡地址(会自动生成)[ip addr可查看] | 内网IP地址(可配置) | 主机名(可配置) |
---|---|---|
10.0.2.15 | 192.168.56.100 | k8s-node1 |
10.0.2.5 | 192.168.56.101 | k8s-node2 |
10.0.2.4 | 192.168.56.102 | k8s-node3 |
若三台主机默认网卡地址一样的问题解决:此博客文章末尾有说明
4.设置Linux环境(三台均需要设置)
- 禁掉防火墙
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 禁掉防火墙
- 禁用SELINUX (linux默认的安全策略)
vi /etc/selinux/config
# enforcing - SELinux security policy is enforced 默认是开启状态的
将SELINUX=enforcing改为SELINUX=disabled
# 禁用掉
# 也可以使用命令
# sed -i 's/enforcing/disabled/' /etc/selinux
# 设置当前会话禁用
setenforce 0
- 关闭swap(内存交换)
# swapoff -a # 临时
# 永久
vi /etc/fstab
# 最后一行swap相关的注释即可
- 设置主机名
hostname # 可以查看主机名,主机名不能是localhost
# 重新设置主机名。按照上方提前约定好的分别起名为k8s-node1、k8s-node2、k8s-node3
hostnamectl set-hostname k8s-node1
- 修改host文件,配置主机名和网卡的关系,保证修改完后IP和主机名均可以正常ping通
默认网卡地址 | 内网IP地址(可配置) | 主机名(可配置) |
---|---|---|
10.0.2.15 | 192.168.56.100 | k8s-node1 |
10.0.2.5 | 192.168.56.101 | k8s-node2 |
10.0.2.4 | 192.168.56.102 | k8s-node3 |
vi /etc/hosts
# 将网卡和主机名对应关系保存到hosts文件中
10.0.2.15 k8s-node1
10.0.2.5 k8s-node2
10.0.2.4 k8s-node3
- 将桥接的IPv4的流量传递到iptables的链,为了更精确的统计流量指标
# 编辑文件,将规则写入k8s.conf
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
EOF
# 使规则生效,执行后有对应规则输出,说明配置成功了
sysctl --system
二、安装docker kubeadm kubelet kubectl(三台均需要设置)
1.安装docker环境
kubernetes需要容器环境,采用docker。 安装配置网络步骤可以查看此博客
2.kubeadm kubelet kubectl
- kubeadm快速安装Kubernetes集群的工具
kubeadm init可以初始化master节点
kubeadm join将从节点加入到集群中 - kubelet 每一个node节点上的代理,帮node创建pod,管理网络等
- kubectl 命令行程序,通过命令操作kubernetes集群
添加阿里云yum镜像
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装指定版本的(kubelet kubeadm kubectl),不指定版本安装最新
yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
设置开启自启动
systemctl enable kubelet # 设置开机自启动
systemctl start kubelet # 启动
systemctl status kubelet # 查看状态
三、部署k8s-master(将 k8s-node1 作为master,所在以下操作在 k8s-node1上操作)
1.初始化master
- 执行kubeadm init命令需要下载很多镜像,提前将镜像下载
新建master_images.sh脚本,将下方脚本内容复制到里面,然后./master_images.sh执行即可
以下为脚本内容,循环下载docker镜像。
#!/bin/bash
images=(
kube-apiserver:v1.17.3
kube-proxy:v1.17.3
kube-controller-manager:v1.17.3
kube-scheduler:v1.17.3
coredns:1.6.5
etcd:3.4.3-0
pause:3.1
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
done