1. 服务器资源

这里使用三台虚拟机作为服务器,服务器最低硬件资源限制如下

服务器CPURAM
192.168.235.180(master)22G
192.168.235.181(node01)22G
192.168.235.180(node02)22G

这里我安装时将CPU设置为2核,内存设置为3G

2.部署总思路

  1. 在所有节点上安装Docker和kubeadm
  2. 部署Kubernetes Master
  3. 部署容器网络插件
  4. 部署 Kubernetes Node,将节点加入Kubernetes集群中

3.环境初始化

三台机器都要执行下面的命令进行初始化

  1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  1. 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config 
setenforce 0
  1. 关闭swap
swapoff -a #临时
vim /etc/fstab   #注释掉里面swapoff相关  使用top命令查看发现swap为0  代表关闭交换分区成功

在这里插入图片描述
在这里插入图片描述
4. 设置hostname

 vim /etc/hostname #每个机器上面分别修改为自己对应的hostname mater节点设置为如k8s-master  node01节点设置为k8s-node01   node02节点设置为k8s-node02

在这里插入图片描述

  1. 配置hosts文件
 vim /etc/hosts
 #配置如下
192.168.235.180 k8s-master
192.168.235.181 k8s-node01
192.168.235.182 k8s-node02
  1. 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#回车 再执行下面命令
sysctl --system
  1. 设置ntp时间同步
    这里参考我写另一篇文章:

  2. 重启机器

init 6

4.所有节点执行安装Docker/kubeadm/kubelet

4.1安装Docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version
Docker version 18.06.1-ce, build e68fc7a

4.2添加阿里云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=1
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

4.3安装kubeadm,kubelet和kubectl

yum install -y kubelet-1.14.0 kubeadm-1.14.0 kubectl-1.14.0
systemctl enable kubelet

#安装kubelet 后会在/etc下生成文件目录/etc/kubernetes/manifests/

  # kubeadm 以后将会在 /etc 路径下生成配置文件和证书文件
  [root@k8s-master etc]# tree kubernetes/
kubernetes/
├── admin.conf
├── controller-manager.conf
├── kubelet.conf
├── manifests
│   ├── etcd.yaml
│   ├── kube-apiserver.yaml
│   ├── kube-controller-manager.yaml
│   └── kube-scheduler.yaml
├── pki
│   ├── apiserver.crt
│   ├── apiserver-etcd-client.crt
│   ├── apiserver-etcd-client.key
│   ├── apiserver.key
│   ├── apiserver-kubelet-client.crt
│   ├── apiserver-kubelet-client.key
│   ├── ca.crt
│   ├── ca.key
│   ├── etcd
│   │   ├── ca.crt
│   │   ├── ca.key
│   │   ├── healthcheck-client.crt
│   │   ├── healthcheck-client.key
│   │   ├── peer.crt
│   │   ├── peer.key
│   │   ├── server.crt
│   │   └── server.key
│   ├── front-proxy-ca.crt
│   ├── front-proxy-ca.key
│   ├── front-proxy-client.crt
│   ├── front-proxy-client.key
│   ├── sa.key
│   └── sa.pub
└── scheduler.conf

5.部署Kubernetes Master

$ kubeadm init \
  --apiserver-advertise-address=192.168.235.180
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.14.0 \
  --service-cidr=10.1.0.0/16 \
  --pod-network-cidr=10.244.0.0/16


安装成功后,会在最后打印几句话(由于我实验过程中忘记截图下面的图为网上的)记得复制出来保存,后面node节点加入需要用到该命令
在这里插入图片描述

配置kubectl工具

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes # 有报错显示即可证明该工具安装成功

6.安装Pod网络插件(CNI)

常见做法是执行下面命令

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

但是我一直失败,通过下面的命令,发现master 节点一直处于NotReady状态

kubectl  get nodes

排查:使用命令 查看到 是因为CNI网络一直没有安装成功

systemctl status kubelet

在这里插入图片描述

继续排查:使用命令

kubectl get pod -n kube-system

因为实验原因当时未截图,下面图片为从网上搜索到,但与我实验过程遇到情况一致
在这里插入图片描述

继续排查:使用命令 发现是因为镜像拉取不到。

kubectl describe pod kube-flannel-ds-amd64-2dqlf -n kube-system

在这里插入图片描述
实际中我拉取的镜像不是quay.io/coreos/flannel:v0.11.0-amd64 为了解决这个问题,我手工拉取kube-flannel.yml 文件,然后修改里面的镜像地址。然后重新kubectl apply -f kube.flannel.yaml 然后就解决问题。

 #从该github 仓库下载找到kube-flannel.yml  在master上直接使用
 https://github.com/anilcumulus/vagrant-k8s-flannel
 

7.Node节点加入集群

分别在k8s-node01和k8s-node02节点执行下面语句(该命令是在第5节部署Kubernetes Master 初始化后让大家记得保存的命令)

kubeadm join 192.168.235.180:6443 --token r8d2hq.lv6csseg7wh0xhpz \
    --discovery-token-ca-cert-hash sha256:ebd35660f1cb2f7cd1d23a4354ffc5ee7dee4f5ba57b1c726e2a2d01f939610a

在master节点执行查看命令 master和node节点为Ready状态表示集群搭建OK

kubectl get nodes

在这里插入图片描述
参考资料如下:
https://www.jianshu.com/p/f4ac7f4555d3
https://www.cnblogs.com/dalianpai/p/12070902.html
https://github.com/anilcumulus/vagrant-k8s-flannel

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐