微服务系列之一:kubernetes集群搭建

最近一年以来,笔者都在和微服务打交道。从微服务的开发(docker + spring boot + docker-compose)一直到微服务的部署和管理(docker swarm || kubernetes),期间踩了很多坑,所以开始利用博客记录下来,一方面整理总结,另一方面也给有需要的程序猿提供一个参考。当然,最重要的是可以大家一起交流,共同学习,共同进步。这是微服务系列的开篇,主要介绍一下kubernetes集群在centos7服务器上的搭建。

什么是kubernetes

首先,我们来了解一下什么是kubernetes。kubernetes是由谷歌开源的,全新的基于容器技术的分布式架构领先方案,其指导思想是“一切以服务为中心,一切围绕服务运转”。kubernetes以docker为基础打造了一个云计算时代的全新分布式系统架构,但是在kubernetes的架构里,docker只是其目前支持的两种底层容器技术之一,另一个容器技术则是Rocket。

kubernetes集群搭建

接下来,我们重点讲述一下如何安装最新版的kubernetes(笔者搭建环境是centos7)。

一、我们需要安装kubeadm,利用kubeadm来完成kubernetes的安装。官方的安装链接地址是:

。大致流程就是,安装并启动docker,然后利用下面的命令安装kubeadm, kubelet and kubectl

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
注意点:需要保证docker的cgroup和kubelet的cgroup相同,笔者采用的做法是:
vi /etc/docker/daemon.json

输入:

{
	"registry-mirrors": ["http://c32b78eb.m.daocloud.io"],
	"exec-opts": ["native.cgroupdriver=systemd"]
}

第一个registry-mirrors主要是设定docker使用国内的镜像,加快docker镜像的获取。保存该文件,并重启docker,然后kubelet应该是能够正常工作的(systemctl status kubelet查看)。示例如下:


二、接下来就是利用kubeadm进行集群的初始化和加入。这里要先设定一下每台机器的hosts文件,指定master节点以及node节点的名称。示例如下:

10.141.211.160 centos-master
10.141.211.179 centos-minion-1
10.141.211.180 centos-minion-2

每台机器上都需要设定,然后reboot每台机器。每次重启或者第一次搭建集群,还需要在每台服务器上执行以下命令:

1.sysctl net.bridge.bridge-nf-call-iptables=1
2.sudo swapoff -a
最后,在master上执行初始化命令(使用flannel作为网络插件)
kubeadm init --pod-network-cidr=10.244.0.0/16

这里,初次初始化因为需要拉取镜像,所以速度上比较慢一些。初始化成功以后,可以看到一条join指令,形式类似如下:

kubeadm join --token a1a906.9554b2a0d40a03b6 10.141.211.181:6443 --discovery-token-ca-cert-hash sha256:5f2749f1903a4a1b2034deea60251e7323220d96f8f20ff7cb2c6ca8fe172dd5

在每个node上执行该指令,加入成功的话,可以看到提示的。

三、为了能够在master上使用kubectl命令,编辑/etc/profile文件,添加export KUBECONFIG=/etc/kubernetes/admin.conf,然后执行命令使修改生效

source /etc/profile
最后,在master上执行下列命令加载flannel网络插件,即可完成集群的部署。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml


问题记录:

  1. 初始化的时候,如果出现网络超时,这是因为从国外拉取的镜像超时导致的,可以给服务器搭个梯子翻墙,或者手动使用命令:docker pull imageName进行镜像的拉取。笔者发现手动pull镜像好像是可以成功的
  2. 所有服务器要保持时间的一致,否则node节点在join的时候,会报证书无效的错误。笔者采用的保证时间同步的方法如下:
  3. 如果一直有节点的状态是NotReady,很可能是flannel需要的镜像pull不下来,可以使用命令kubectl get po -o wide --all-namespaces:kubectl get po -o wide --all-namespaces进行查看验证。对于这个问题,笔者暂时没有找到有效的解决方法。
# 安装
yum install -y chrony
# 启用
systemctl start chronyd
systemctl enable chronyd
# 设置亚洲时区
timedatectl set-timezone Asia/Shanghai
# 启用NTP同步
timedatectl set-ntp yes
以上就是kubernetes集群搭建的一个总结,如有错误或者疑问,欢迎指出和提问,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值