一、设置基本环境
1、禁止selinux
- 安装操控selinux的命令
sudo apt-get install -y selinux-utils
- 禁止selinux
setenforce 0
- 重启操作系统
shutdown -r now
- 查看selinux是否已经关闭
sudo getenforce
Disabled(表示已经关闭)
2、关闭虚拟分区
sudo swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab
3、设置kubernetes启动参数
cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0 #由于tcp_tw_recycle与kubernetes的NAT冲突,必须关闭!否则会导致服务不通。
vm.swappiness=0 #禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 #不检查物理内存是否够用
vm.panic_on_oom=0 #开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1 #关闭不使用的ipv6协议栈,防止触发docker BUG.
net.netfilter.nf_conntrack_max=2310720
EOF
4、kube-proxy开启ipvs的前置条件
modprobe br_netfilter
cat >ipvs.sh<< EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod +x ipvs.sh
sh ipvs.sh
lsmod |grep ip_vs
二、安装docker
1、安装 apt 依赖包,用于通过HTTPS来获取仓库,更新apt源:
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
2、添加 Docker 的官方 GPG 密钥:**
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
- 验证添加的密钥是否成功:
sudo apt-key fingerprint 0EBFCD88
3、使用以下指令设置稳定版仓库
sudo add-apt-repository \
"deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
4、查看docker版本,选择要安装的docker版本:
apt-cache madison docker-ce
5、 安装docker-ce指定版本
Ps:此处演示使用的docker-ce版本为18.06.1-ce
sudo apt-get install -y docker-ce=18.06.1~ce~3-1~ubuntu
- 查看安装是否成功
docker version
6、修改docker的cgroup driver,并设置为阿里云源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF
7、设置开机自启并重启docker
systemctl enable docker
systemctl restart docker
三、安装 kubectl、kubelet、kubeadm**
1、添加阿里云k8s源
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
2、添加kubernetes源文件
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
- 更新,使上一步添加的源文件生效
sudo apt-get update
3、查看可安装版本:
apt-cache madison kubectl
4、安装指定版本的kubelet、kubeadm、kubectl
Ps:这里演示使用的版本为:1.17.0-00
sudo apt-get install -y kubelet=1.17.0-00 kubeadm=1.17.0-00 kubectl=1.17.0-00
- 查看安装是否成功
kubectl version
kubeadm version
5、设置开机自启
systemctl enable kubelet.service
6、 配置kubelet禁用swap,并重启
tee /etc/default/kubelet <<EOF
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF
systemctl daemon-reload && systemctl restart kubelet
四、开始部署
1、安装初始镜像
- 拉去初始化镜像
kubeadm config images list > /root/a.txt
- 检查初始镜像版本是否跟安装的kubectl版本一致,如果不一致需要手动修改
cat a.txt
ps:我再本地搭建时,偶会会碰到拉去的初始化镜像版本跟本地安装的k8s版本不一致,导致后面部署失败,因此建议大家初始化前,先检查一下镜像版本;
- 使用shell脚本拉去初始化镜像
ps:k8s默认拉取国外的源镜像,如果不能科学上网的同学,拉取比较慢,或者直接拉取失败,我这里写了一个简单的shell脚本,先通过国内的源拉取,再重新打包(tag),修改镜像名称;
vim pullimages.sh
- 将一下内容添加到 pullimages.sh 中
PS:这个是本人写的脚本,可以自动用国内源下载拉去相应的镜像
#!/bin/bash
for i in $( cat /root/.a.txt )
do
docker pull registry.aliyuncs.com/google_containers/${i#*/}
docker tag registry.aliyuncs.com/google_containers/${i#*/} k8s.gcr.io/${i#*/}
docker rmi registry.aliyuncs.com/google_containers/${i#*/}
done
echo 初始镜像已经拉取成功,请使用 docker images命令查看!
- 给pullimages.sh脚本赋予执行权限,并执行脚本
chmod +x pullimages.sh
sh pullimages.sh
- 等待脚本执行完毕后,可以通过以下命令,查看已经拉去到的初始镜像
docker images
ps:子节点只需要操作到此步骤,以下仅master节点操作即可;
2、编辑init初始化yaml文件
- 打印yaml文件
kubeadm config print init-defaults > kubadm-config.yaml
- 修改kubadm-config.yaml配置信息
将其中advertiseAddress修改为本机IP地址 - 并添加以下两条数据
podSubnet: 10.244.0.0/16
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
SupportIPVSProxyMode: true
mode: ipvs
3、启动
kubeadm init --config=kubadm-config.yaml --upload-certs | tee kubeadm-init.log
结果如下图所示:
- 根据提示设置master节点
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4、验证kubernetes启动结果
PS : 注意显示master状态是NotReady
,证明初始化服务器成功
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 12m v1.17.0
- 查看当前集群状态
kubectl get cs
5、部署集群内部通信flannel网络插件
- 再master节点上下载kube-flannel.yml文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 检查kube-flannel.yml文件中net-conf.json的Network参数是否跟上文kubadm-config.yaml文件中的podSubnet参数一致;
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
- 部署flannel网络插件
kubectl apply -f kube-flannel.yml
- 命令执行完毕后,查看节点状态,显示Ready,即flannel网络插件部署成功;
kubectl get nodes
结束:
至此Ubuntu搭建k8s+Dockers集群已经成功,可以通过yaml文件部署相应的容器了
注意:
- 本文是在Ubuntu18.04的初始化环境下搭建的,
- 并且Ubuntu搭建K8S+Docker容错率很低,遇到bug如果百度解决不了可以私信我,
- 如果本文对你有用,请点赞收藏,后期准备发一篇全部离线情况下部署k8s+docker
- 如果搭建master单节点集群,需要用一下命令设置允许master节点部署POD
kubectl taint nodes --all node-role.kubernetes.io/master-