一. 安装 Kubernetes 前置环境准备阶段
- 首先Kubernetes 支持一下两种安装方式
- 二进制方式(建议生产环境使用)
- kubeadm引导方式(官方推荐)
- 准备多台服务器,服务器之间内网互通,并且开放指定端口(需要开发下图端口访问权限,测试学习阶段可以放开所有端口)参考官方文档
- 所有安装Kubernetes的服务器需要安装docker容器化环境
- 每台服务器安装Kubernetes 相关核心组件
- 每台服务器都需要安装kubeadm集群安装引导工具(当前基于kubeadm安装,只是一个安装工具,安装完成后也可以卸载掉,)
- 每台服务器都需要安装kubelet组件(kubelet具体可以参考该文档)
- 每台服务器都需要安装kubect程序员使用的命令行工具
- 每台机器安装kubelet以后,其它核心组件都可以通过kubelet使用容器化方式创建安装,官方已经把核心组件做成了镜像,例如apiServer, controllerManager,etcd, kube-proxy等等
- 最后由kubeadm引导创建集群
- 大致安装流程
- 准备N台服务器,内网互通
- 服务器中安装Docker容器环境
- 服务器安装Kubernetes
- 假设是三条服务器安装Kubernetes集群环境,每台服务器上都需要安装kubeadm创建集群的引导工具,kubelet, kubect(操作kubernetes的命令行工具)
- 官方已经将Kubernetes所需要的其它组件做成了镜像, 当安装了kubelet以后,其它核心组件由kubelet以容器化的方式安装即可
- 然后由kubeadm引导创建集群(安装完成后可以删除)
服务器前置配置
- 当前为了方便,安装windows10版本docker,参考文档:1. Docker windows版本安装
- docker安装完成后,拉取centos指定版本镜像,运行centos(可以通过docker ui页面操作运行,也可以通过命令运行),在Docker上运行centos
此时整个架构是docker上运行多个centos, 每个centos服务器之间内网互通,并且开放指定端口,每个centos上再安装docker环境,安装kubernetes,多个centos上的kubernetes组合成为一个集群
- 为了方便使用,执行命令修改服务器hostname,并同步linux etc下的配置文件(注意不同服务器的hostname不同)
//查看当前linux hostname
# hostname
//修改linux hostname
# hostnamectl set-hostname 自定义hostname名称
- 修改完毕后同步linux etc 设置ip映射
echo “127.0.0.1 $(hostname)” >> /etc/host - 查看etc中hostname与ip映射
vim /etc/hosts
- 关闭selinux (两行命令直接赋值执行即可)
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
- 关闭 swap分区内存交换:(两行命令直接赋值执行即可)
//临时关闭命令
swapoff -a
//永久关闭命令
sed -ri 's/.*swap.*/#&/' /etc/fstab
//执行一下命令查看是否关闭成功,命令执行完毕后Swap中都为0表示成功
free -m
//或执行下方指令关闭swap
echo "vm.swappiness = 0">> /etc/sysctl.conf
swapoff -a && swapon -a
sysctl -p
- 配置桥接流量(此处测试使用,跟生产上有一定区别),防止ipv6是流量统计数据不精确问题
//先执行设置
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
//然后执行设置生效(两个步骤执行下来后ipv6就可以桥接到ipv4上)
sudo sysctl --system
9. 注意执行上面命令时如果没有安装sudo命令可能会报sudo: command not found异常,先安装sudo
yum -y install sudo
安装docker
1.也可以参考docker安装文档
#移除docker
sudo yum remove docker*
sudo yum install -y yum-utils
#配置docker yum 源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker 19.03.9
yum install -y docker-ce-3:19.03.9-3.el7.x86_64 docker-ce-cli-3:19.03.9-3.el7.x86_64 containerd.io
#安装docker 19.03.9 docker-ce 19.03.9
yum install -y docker-ce-19.03.9-3 docker-ce-cli-19.03.9 containerd.io
#启动服务
systemctl start docker
systemctl enable docker
#配置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
二. 安装K8S核心(所有节点都需要安装)
- 参考博客
- 安装k8s依赖与yum源(下方命令全部复制一次执行,回车)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
- 防止之前安装过,执行移除kubelet命令
yum remove -y kubelet kubeadm kubectl
- 查看可以安装的版本
yum list kubelet --showduplicates | sort -r
- 安装kubelet、kubeadm、kubectl 指定版本
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
- 开机启动kubelet
//设置开机启动命令 && 启动命令
systemctl enable kubelet && systemctl start kubelet
k8s所需镜像下载
- 首先执行下方命令,查看一个k8s节点安装需要哪些镜像,因为默认是通过国外地址下载的,防止下载失败,获取到需要的镜像后,通过三方例如阿里云等下载这些镜像
kubeadm config images list
- 根据所需镜像封装一个脚本,该脚本的意思是,将这些镜像通过一个地址获取,例如阿里云的(注意配置的这个下载镜像的地址要能拉取到)
- images中是k8s需要的镜像列表, docker pull中封装的是这些镜像的下载地址
- linux上执行 "vi images.sh"命令,创建images.sh脚本文件,将下方代码复制进去,:wq保存退出
- 执行"chmod +x images.sh"命令给创建的脚本文件添加执行权限
- 执行"./images.sh"命令, 运行脚本,获取需要的镜像
#!/bin/bash
images=(
kube-apiserver:v1.21.0
kube-proxy:v1.21.0
kube-controller-manager:v1.21.0
kube-scheduler:v1.21.0
coredns:v1.8.0
etcd:3.4.13-0
pause:3.4.1
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
- 注意1.21.0版本的k8s coredns镜像比较特殊,结合阿里云需要特殊处理,重新打标签
docker tag registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/coredns:v1.8.0 registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/coredns/coredns:v1.8.0
- 初始化安装
kubeadm init
- 后续还有其他命令,此处不示例了