基于阿里云ECS服务器搭建k8s集群

此处仅有两台服务器,一台master节点,一台node节点,后期可按照步骤继续增加node节点

1. 搭建环境

  • Master节点:
    CPU : 2核、内存 :2GiB、 操作系统:Centos7.6 64位、 带宽:1Mbps
    服务器公网IP:** 、 私有IP:**

  • Node节点:
    CPU : 2核、内存 :4GiB、 操作系统:Centos7.6 64位、 带宽:1Mbps
    服务器公网IP:** 、 私有IP:**

  • 集群版本:
    k8s=v1.15.0 、docker=docker-ce-18.06.1.ce-3.el7 、etcd=3.3.10、 dashboard=v1.10.1、flannel=v0.11.0-amd64、coreDns= 1.3.1、pause=3.1

2. 安装步骤

2.1 需要在每一个节点上进行的操作

2.1.1 提前准备

在K8s中为了高效运行,整个集群的机器需要关闭防火墙、SWAP分区以及Selinux,使用如下命令:

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 暂时关闭SWAP分区
swapoff -a
# 永久禁用SWAP分区
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 禁用Selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

将系统中桥接的IPv4以及IPv6的流量串通:

cat >/etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

2.1.2 安装Docker

这里我们使用阿里云的镜像。首先下载阿里云镜像仓库描述文件:

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

如果没有wget命令请使用:yum -y install wget进行安装

然后指定Docker版本进行安装:

yum -y install docker-ce-18.06.1.ce-3.el7

开启Docker的服务以及安装:

systemctl enable docker && systemctl start docker
docker --version

此时应该能得到如下的情况的验证:
在这里插入图片描述

在K8S中建议Docker与K8S使用的Cgroupdriver值为 “systemd”,所以每一个节点还需要进行如下的修改 :

## Create /etc/docker directory.
mkdir /etc/docker

# Setup daemon.
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

mkdir -p /etc/systemd/system/docker.service.d

# Restart Docker
systemctl daemon-reload
systemctl restart docker

2.1.3 安装Kubernetes的安装组件

在安装k8s之前也需要加上yum源:

vi /etc/yum.repos.d/kubernetes.repo

# 在这个文件中输入
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enable=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

指定版本进行kubeadm、kubelet、kubectl的安装:

yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0

此时应该会得到如下描述的界面:
在这里插å¥å›¾ç‰‡æè¿°
然后开启kubelet服务:

systemctl enable kubelet.service

2.2 需要在Master上操作

注意需要自己填写的地方,可以根据自己的情况进行修改,然后基于我的运行情况就是,执行如下命令:

kubeadm init \
--apiserver-advertise-address= 此处为master节点的公网ip\
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.15.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16  

–apiserver-advertise-address string API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。 默认设置位master节点ip地址 –pod-network-cidr string
通过这个值来设定pod网络的IP地址网段;设置了这个值以后,控制平面会自动给每个节点设置CIDRs(无类别域间路由,Classless
Inter-Domain Routing)。默认为10.1.0.0/16 –service-cidr string Default:
“10.96.0.0/12” 设置service的CIDRs,默认为 10.96.0.0/12。


因为阿里云ecs里没有配置公网ip,etcd无法启动,所以kubeadm在初始化会出现”timeout“的错误。

解决办法:

  1. 建立两个ssh对话,即用ssh工具新建两个标签,一个用来初始化节点,另一个在初始化过程中修改配置文件。 注意是初始化过程中,每次运行kubeadm init,kubeadm都会生成etcd的配置文件,如果提前修改了配置文件,在运行kubeadm init时会把修改的结果覆盖,那么也就没有作用了。
    在这里插入图片描述

  2. 运行”kubeadm init …“上述的初始化命令,此时会卡在

 [wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
 [kubelet-check] Initial timeout of 40s passed
  1. 在输入上述命令后,kubeadm即开始了master节点的初始化,但是由于etcd配置文件不正确,所以etcd无法启动,要对该文件进行修改。
    文件路径"/etc/kubernetes/manifests/etcd.yaml"。

修改前:

在这里插入图片描述

修改后:

在这里插入图片描述

此处"xxx"为公网ip,要关注的是"–listen-client-urls"和"–listen-peer-urls"。需要把"–listen-client-urls"后面的公网ip删除,把"–listen-peer-urls"改为本地的地址。

  1. 稍等后master节点初始化就会完成

注意、注意
在这个部分安装完成后,会得到一个如下的token,这个在后面node加入master要用的。

img

转到node节点窗口,通过”kubeadm join…"命令将node节点加入到master集群中。


master节点完成初始化后以及node节点加入后,通过阅读终端信息,我们还需执行几个命令:

 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 node

但是会查看到master节点和node节点都是NotReady状态。 因为在K8S中,整个系统处于一个扁平的网络之下,其中在谷歌内部的网络架构中,这个是天然存在的,但是在我们自己的环境里这个需要设置。

所以下一步就是部署网络环境,此处我们使用的就是由Centos开发的flannel网络组件。

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

其中需要在master节点和node节点都安装flannel插件。


使用“kubectl get node”可查看所有节点都处于ready状态了

在这里插入图片描述

使用“kubectl get pods --all-namespaces”可查看所有Pod都在running状态

在这里插入图片描述

此处为止,k8s集群基本安装已完成


2.3 安装dashboard(k8s集群的web ui)

因dashboard的安装为非硬性要求,所以整个安装步骤可参考下述地址

https://www.cnblogs.com/wucaiyun1/p/11692204.html

目前已在master节点(47服务器)安装好了dashboard,因为证书原因只能在火狐浏览器上进行查看,通过访问https://master节点IP:30001/
在这里插入图片描述

此处以令牌登录为例,后期若有需求可使用kubeconfig进行登录

在master节点中输入命令获取token登录:

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard | awk '{print $1}')

在这里插入图片描述

将token输入登录

在这里插入图片描述


本文中有部分内容来源于其他文章,因记录该笔记的时间较为久远,忘了用到哪些文章,如有侵权,请联系本人删除该内容或加入文章引用链接







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章