企业 Kubernetes集群部署

kubernetes

介绍

在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应
用了很多年,Borg系统运行管理着成千上万的容器应用。

Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收
了Borg系统中的经验和教训。

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

在Kubenetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器,在后边的案例中,同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源。

Kubernetes的好处:

  • 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
  • 服务高可用、高可靠。
  • 可将负载运行在由成千上万的机器联合而成的集群中。
Kubernetes设计架构

Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。下面这张图是Kubernetes的架构图。
在这里插入图片描述

在这张系统架构图中,我们把服务分为运行在工作节点上的服务和组成集群级别控制板的服务。
Kubernetes节点有运行应用容器必备的服务,而这些都是受Master的控制。
每次个节点上当然都要运行Docker。Docker来负责所有具体的映像下载和容器运行。

Kubernetes主要由以下几个核心组件组成:

  • etcd保存了整个集群的状态;
  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns负责为整个集群提供DNS服务
  • Ingress Controller为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询

分层架构
在这里插入图片描述

  • 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境;
  • 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等);
  • 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等);
  • 接口层:kubectl命令行工具、客户端SDK以及集群联邦;
  • 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴:
    • Kubernetes外部:日志、监控、配置管理、CI、CD、 - Workflow、FaaS、OTS应用、ChatOps等;
    • Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等。

K8s集群部署

集群部署

首先需要搭建harbor主机,因为我们使用本地私有仓库里的镜像去做部署速度会很快,也不需要考虑其他问题
server3主机搭建了harbor仓库,可以通过浏览器直接去访问到
在这里插入图片描述

这里我使用了三台主机做集群
server5、server6和server7三台主机
需要给这些主机都去安装docker-ce服务,消除警告。
然后去配置docker的后台启动方式,在三台主机上都执行

[root@server5 ~]# 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

[root@server5 ~]# mkdir -p /etc/systemd/system/docker.service.d
[root@server5 ~]# systemctl daemon-reload
[root@server5 ~]# systemctl restart docker

可以参考官网操作文档:https://kubernetes.io/docs/setup/production-
environment/container-runtimes/#docker
下来还需要禁用集群主机上的swap分区,在server5、server6和server7操作

[root@server5 ~]# swapoff -a
[root@server5 ~]# vim /etc/fstab 	#注释掉swap挂载
#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0

安装K8s
这里我们为了加速方便安装,使用阿里云的镜像地址去部署
部署还是在3台集群主机上

[root@server5 ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
> [kubernetes]
> name=Kubernetes
> baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
> enabled=1
> gpgcheck=1
> repo_gpgcheck=1
> gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
> EOF
[root@server5 ~]# setenforce 0	#关闭selinux
[root@server5 ~]# yum install -y kubelet kubeadm kubectl	#安装服务
[root@server5 ~]# systemctl enable --now kubelet.service 	#启动服务

下来就需要去更改配置信息,因为默认的镜像下载是从k8s.gcr.io上下载组件镜像,国外的网站我们去使用是很慢的,除非有vpn,所以我们可以改为使用阿里云去下载,就很快了

[root@server5 ~]# kubeadm config print init-defaults
---
imageRepository: k8s.gcr.io	默认的地址
---

直接通过阿里云列出需要下载的镜像
[root@server5 ~]# kubeadm config images list --image-repository registry.aliyuncs.com/google_containers

下载镜像
[root@server5 ~]# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

参数: --kubernetes-version,可以指定k8s安装版本

在一台节点上下载完镜像之后,可以去上传到我们自己的私有仓库harbor里,之后需要直接从本地仓库就可以去拉取使用
操作

[root@server5 ~]# docker images	#可以查看到我们下载的镜像

对这些镜像打标签,reg.test.com/library/是我要上传的harbor的主机名可库名
[root@server5 ~]# for i in `docker images |grep aliyuncs | awk '{print $1":"$2}' | awk -F / '{print $3}'`; do docker tag  registry.aliyuncs.com/google_containers/$i reg.test.com/library/$i ; done

因为harbor里有https认证,所以在server5添加harbor的证书和地址解析,docker登陆认证,然后将打过标签的镜像推送到仓库里

[root@server5 ~]# for i in `docker images | grep test | awk '{print $1":"$2}'` ; do docker push $i; done

在这里插入图片描述

现在就可以直接从harbor仓库去拉取镜像了
初始化集群
参数:–pod-network-cidr=10.244.0.0/16,使用flannel网络组件时必须添加,因为上传了私有仓库,我们也可以用私有仓库去初始化

[root@server5 ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.test.com/library

当前面的操作成功后,就可以根据下面的指导去继续操作
To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube	#在当前用户家目录下建立这个目录,可以创建一个普通用户去操作,权限下放
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

创建用户kubeadm,为了操作方便直接给它超户的权限,切换到该用户

[kubeadm@server5 ~]$ mkdir ~/.kube
[kubeadm@server5 ~]$ sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config
[kubeadm@server5 ~]$ sudo chown $(id -u):$(id -g) ~/.kube/config

然后就可以看到集群里的节点了,目前我们只设置server5,只有它一个master’节点,状态是notready

[kubeadm@server5 ~]$ kubectl get node
NAME      STATUS     ROLES    AGE   VERSION
server5   NotReady   master   19m   v1.18.4

其他两台主机我们需要也来加入集群里,使用的命令在初始化时有显示
在这里插入图片描述

这里面要注意的是加入集群可以直接执行这个命令,但是里面的token码是有时间限制

[root@server6 ~]# kubeadm join 172.25.254.5:6443 --token fzm2k5.2rplyi23r1lacfsj \
>     --discovery-token-ca-cert-hash sha256:76ccd44e9e50d09527ddd9bca75e53c8d05bed41347c22eca121b932bf536be3

可以看一下token的有效期,默认是24小时,过期就不能再使用这个token去添加信息的节点了,但是有命令可以创建新的token

[kubeadm@server5 ~]$ kubeadm token list	#列出token
TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
fzm2k5.2rplyi23r1lacfsj   23h         2020-06-20T14:16:25+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

[kubeadm@server5 ~]$ kubeadm token create

都添加进来之后,就都可以看到,但是状态是未准备的

[kubeadm@server5 ~]$ kubectl get nodes
NAME      STATUS     ROLES    AGE   VERSION
server5   NotReady   master   24m   v1.18.4
server6   NotReady   <none>   83s   v1.18.4
server7   NotReady   <none>   31s   v1.18.4

如果无法列出,可以配置kubectl命令补齐功能,然后就可以了

[kubeadm@server5 ~]$ echo "source <(kubectl completion bash)" >> ~/.bashrc
[kubeadm@server5 ~]$ source ~/.bashrc 
安装网络组件

安装flannel网络组件:https://github.com/coreos/flannel
需要下载flannel.tar,kube-flannel.yml
导入镜像,这个镜像不能放在私有仓库,因为它的名称和kubeadm里的信息是对应的,在所有节点上都去进行安装镜像

[root@server5 ~]# docker load -i flannel.tar 

所有节点都导入镜像后,在master节点执行
[root@server5 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

[root@server5 ~]# kubectl get pod -n kube-system
NAME                              READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-27hnl          1/1     Running   1          3d1h
coredns-7ff77c879f-l4z59          1/1     Running   1          3d1h
etcd-server5                      1/1     Running   3          3d1h
kube-apiserver-server5            1/1     Running   3          3d1h
kube-controller-manager-server5   1/1     Running   3          3d1h
kube-flannel-ds-amd64-dsblv       1/1     Running   2          2d23h
kube-flannel-ds-amd64-gsptr       1/1     Running   1          2d23h
kube-flannel-ds-amd64-xvrm5       1/1     Running   2          2d23h
kube-proxy-2c6gg                  1/1     Running   2          3d
kube-proxy-4t2nb                  1/1     Running   2          3d
kube-proxy-ctmxk                  1/1     Running   3          3d1h
kube-scheduler-server5            1/1     Running   3          3d1h


[root@server5 ~]# kubectl get node	#所有节点都是ready
NAME      STATUS   ROLES    AGE    VERSION
server5   Ready    master   130m   v1.18.4
server6   Ready    <none>   107m   v1.18.4
server7   Ready    <none>   106m   v1.18.4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Howei__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值