通过阿里云ecs部署k8s集群

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

1. 搭建环境

Master节点:
CPU : 2核、内存 :4GiB、 操作系统:Centos7.6 64位、 带宽:3Mbps
Node节点:
CPU : 2核、内存 :4GiB、 操作系统:Centos7.6 64位、 带宽:1Mbps
将公网所有端口都开放

集群版本:
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”,所以每一个节点还需要进行如下的修改 :

 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集群中。
kubeadm join 120.79.181.230:6443 --token lgzea8.o7yeg6pcv7yw6xs3
–discovery-token-ca-cert-hash sha256:1347cd4c1d2fcec6a0b9eaf2a30a2ec1c7afe82ad46a7f4f7f8780a160039d74

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

使用下述命令可查看集群中节点情况
kubectl get node

[root@iZwz9gwr0avfoncztr5y2jZ ~]# kubectl get pod 
The connection to the server localhost:8080 was refused - did you specify the right host or port?

有报错:
报错原因:环境变量,kubernetes master没有与本机绑定,集群初始化的时候没有绑定,此时设置在本机的环境变量即可解决问题。

[root@iZwz9gwr0avfoncztr5y2jZ ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@iZwz9gwr0avfoncztr5y2jZ ~]# source ~/.bash_profile

node节点问题,将master节点/etc/kubernetes/admin.conf文件传到Node节点并刷新就好

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

journalctl -f

在这里插入图片描述

所以下一步就是部署网络环境,此处我们使用的就是由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状态
在这里插入图片描述

脚本:

#!bin/bash
#关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
sleep 3
#关闭swap分区
swapoff -a
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sleep 3
#禁用selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
sleep 3
#将系统中桥接的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
sleep 3
#安装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
sleep 3
#在K8S中建议Docker与K8S使用的Cgroupdriver值为 “systemd”
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
sleep 3
#重新启动docker
systemctl daemon-reload
systemctl restart docker

#增加k8syum源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[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
EOF
sleep3
mkdir -p /etc/systemd/system/docker.service.d

#指定版本进行kubeadm、kubelet、kubectl的安装:
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
sleep 3
systemctl enable kubelet.service

#初始化节点
kubeadm init \
--apiserver-advertise-address=101.37.83.224 \
--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  

sleep 3
#刷新权限
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
sleep 3
#安装flennel插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值