通过阿里云ecs部署k8s集群
通过阿里云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
更多推荐
所有评论(0)