通过阿里云ecs部署k8s集群

  • 1. 搭建环境
  • 2. 安装步骤
  • 禁用Selinux
  • Restart Docker

此处仅有两台服务器,一台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"]
}
EOFmkdir -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

通过阿里云ecs部署k8s集群相关推荐

  1. 从零搭建阿里云托管版k8s集群-容器日志采集(八)

    相信很多人都知道可以自己搭建elk来方便的收集日志,查询日志.虽然搭建elk并不是十分复杂,可对于一般的开发人员来说,尤其是对linux操作不是很熟练的人,是一项相当有难度的工程.所幸现在阿里云已经为 ...

  2. RabbitMQ 进阶 -- 阿里云服务器部署RabbitMQ集群

  3. 阿里云-ECS云服务器跨地域部署k8s集群

    阿里云-ECS云服务器跨地域部署k8s集群 一 .背景介绍 二.环境准备 2.1 ECS云服务资源清单 2.2 K8s软件列表 三.阿里云ECS服务器网络问题 3.1 问题阐述 3.2 解决方案 四. ...

  4. 阿里云部署k8s集群

    ​ 阿里云部署k8s集群 前言 1.k8集群架构 Kubernetes Cluster = N Master Node + N Worker Node:N主节点+N工作节点: N>=1 2.机器 ...

  5. 腾讯云部署K8s集群

    腾讯云部署K8s集群 文章目录 腾讯云部署K8s集群 0. 导读(重要!!!一定要读) 1. 环境准备 版本 服务器配置 2. 安装步骤 所有主机操作 1. 提前准备 2. 安装docker 3. 安 ...

  6. 【云原生Kubernetes系列第五篇】kubeadm v1.20 部署K8S 集群架构(人生这道选择题,总会有遗憾)

    系列文章目录 ??即日起,更新云原生相关知识,喜欢的小伙伴可以给我点个三连喔 ??收录至专栏 云原生 ??[云原生Docker系列第一篇]Docker镜像管理 ??[云原生Docker系列第二篇]Do ...

  7. 《云原生之K8s实战》基于kubeadm部署K8S集群

    目录 基于kubeadm部署K8S集群 一.环境准备 1.1.主机初始化配置 1.2.部署docker环境

  8. RKE安装部署K8S集群、Rancher

    服务器准备:三台虚拟机(master:1,node:2:这里选用的阿里云ECS) OS hostname 内网IP Centos7 joker-master-1 172.27.31.149 Cento ...

  9. 【02】Kubernets:使用 kubeadm 部署 K8S 集群

    写在前面的话 通过上一节,知道了 K8S 有 Master / Node 组成,但是具体怎么个组成法,就是这一节具体谈的内容.概念性的东西我们会尽量以实验的形式将其复现. 部署 K8S 集群 互联网常 ...

最新文章

  1. Lambda表达式【转】
  2. 使用增强型后缀数组(ESA)的文本匹配算法
  3. 复杂查询练习_《从零学会SQL:简单查询》第二关 简单查询
  4. 第五章 PX4-Pixhawk-GPS解析
  5. MyEclipse10安装SVN插件的几种方法
  6. Enterprise search result view column显示technical name
  7. 不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序
  8. 中心城镇问题(长链剖分优化树形dp)
  9. Sona(NBUT-1457)
  10. Chrome 好玩的插件
  11. Linux之cat命令
  12. plist java_帮助plist文件
  13. tek示波器软件_给示波器以云空间,泰克发布突破性的数据协同软件TekDrive
  14. 《图解HTTP》54~72Page 返回的HTTP状态码 与HTTP协作的Web服务器
  15. centos 下安装nginx
  16. 在Unity3D中控制动画播放
  17. (7)数据分析-秩和检验
  18. [生存志] 第92节 纵横游说之辞
  19. uWSGI, Gunicorn负载服务器怎么选
  20. markdown编辑器推荐(附官网)

热门文章

  1. Flutter 图片如何充满父布局
  2. word2vec原理详解及实战
  3. 数字孪生智慧展厅来袭:“云上看展”,双线共频
  4. nuiapp请求网络_uni-app 页面配置和跳转(一)
  5. 用Python实现一个简单课堂点名器V3
  6. 《基于子空间的人脸识别》文献笔记
  7. 算法实践:数独(1)
  8. 如何使用Babel实现polyfill
  9. 电磁铁没有了磁性怎么办
  10. DW的快捷键介绍及简单的应用