基于阿里云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:
此处仅有两台服务器,一台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“的错误。
解决办法:
-
建立两个ssh对话,即用ssh工具新建两个标签,一个用来初始化节点,另一个在初始化过程中修改配置文件。 注意是初始化过程中,每次运行kubeadm init,kubeadm都会生成etcd的配置文件,如果提前修改了配置文件,在运行kubeadm init时会把修改的结果覆盖,那么也就没有作用了。
-
运行”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
- 在输入上述命令后,kubeadm即开始了master节点的初始化,但是由于etcd配置文件不正确,所以etcd无法启动,要对该文件进行修改。
文件路径"/etc/kubernetes/manifests/etcd.yaml"。
修改前:
修改后:
此处"xxx"为公网ip,要关注的是"–listen-client-urls"和"–listen-peer-urls"。需要把"–listen-client-urls"后面的公网ip删除,把"–listen-peer-urls"改为本地的地址。
- 稍等后master节点初始化就会完成
注意、注意
在这个部分安装完成后,会得到一个如下的token,这个在后面node加入master要用的。
转到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输入登录
本文中有部分内容来源于其他文章,因记录该笔记的时间较为久远,忘了用到哪些文章,如有侵权,请联系本人删除该内容或加入文章引用链接
更多推荐
所有评论(0)