一、设置基本环境

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 eureka关闭自我保护 docker关闭selinux_ubuntu


二、安装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

docker eureka关闭自我保护 docker关闭selinux_k8s_02

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

docker eureka关闭自我保护 docker关闭selinux_k8s_03

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

docker eureka关闭自我保护 docker关闭selinux_docker eureka关闭自我保护_04

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版本不一致,导致后面部署失败,因此建议大家初始化前,先检查一下镜像版本;

docker eureka关闭自我保护 docker关闭selinux_docker_05

  • 使用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

docker eureka关闭自我保护 docker关闭selinux_ubuntu_06


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

docker eureka关闭自我保护 docker关闭selinux_kubernetes_07

3、启动

kubeadm init --config=kubadm-config.yaml  --upload-certs | tee kubeadm-init.log

结果如下图所示:

docker eureka关闭自我保护 docker关闭selinux_docker_08

  • 根据提示设置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 VERSIONmaster NotReady master 12m v1.17.0

  • 查看当前集群状态
kubectl get cs

docker eureka关闭自我保护 docker关闭selinux_kubernetes_09

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

docker eureka关闭自我保护 docker关闭selinux_docker eureka关闭自我保护_10

结束:

至此Ubuntu搭建k8s+Dockers集群已经成功,可以通过yaml文件部署相应的容器了

注意

  • 本文是在Ubuntu18.04的初始化环境下搭建的,
  • 并且Ubuntu搭建K8S+Docker容错率很低,遇到bug如果百度解决不了可以私信我,
  • 如果本文对你有用,请点赞收藏,后期准备发一篇全部离线情况下部署k8s+docker
  • 如果搭建master单节点集群,需要用一下命令设置允许master节点部署POD
kubectl taint nodes --all node-role.kubernetes.io/master-