Kubernetes(1)入门简介与集群部署

一、Kubernetes简介

首先,他是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应 用了很多年,Borg系统运行管理着成千上万的容器应用;其在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。

Kubernetes是一个完备的分布式系统支撑平台,结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。

• Kubernetes的优势:
隐藏资源管理和错误处理,用户仅需要关注应用的开发。具有轻量级和开源的优点
服务高可用、高可靠,负载均衡。
可将负载运行在由成千上万的机器联合而成的集群中。

基本对象:
Pod:最小部署单元,一个Pod 有一个或多个容器组成,容器中共享存储和网络,在同一台docker主机上运行
Service:一个应用服务抽象,定义了Pod逻辑集合和访问这个Pod集合的策略
Volume:数据卷
Namespace
Lable:标签

二、Kubernetes架构

整体架构:
在这里插入图片描述

Kubernetes核心组件:

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

Kubernetes集群:

  • Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),
    一切都基于分布式的存储系统
    请添加图片描述

Master节点:

组成模块功能特性
APIServer负责对外提供RESTful的kubernetes API的服务是系统管理指令的统一接口,任何对资源的增删该查都要交给APIServer处理后再交给etcd
schedule负责调度Pod到合适的Node如果把scheduler看成一个黑匣子,那么它的输入是pod和由多个Node组成的列表,输出是Pod和一个Node的绑定
controller-manager负责管理资源都对应的控制器如果APIServer做的是前台的工作的话,那么controller manager就是负责后台的
etcdetcd是一个高可用的键值存储系统kubernetes使用它来存储各个资源的状态,从而实现了Restful的API。

Node节点:

组成模块功能特性
kube-prox实现了kubernetes中的服务发现和反向代理功能kube-proxy支持TCP和UDP连接转发默认基Round Robin算法将客户端流量转发到与service对应的一组后端pod。kube-proxy使用etcd的watch机制监控集群中service和endpoint对象数据的动态变化,并且维护一个service到endpoint的映射关系,从而保证了后端pod的IP变化不会对访问者造成影响
kublet负责维护和管理该Node上的所有容器是Master在每个Node节点上面的agent,负责使Pod的运行状态与期望的状态一致。
kubeadm:用来初始化集群的指令

分层架构:

• Kubernetes设计理念和功能其实就是一个类似Linux的分层架构

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

请添加图片描述

二、Kubernetes部署

2.1.环境准备

主机域名(ip)集群功能环境配置要求
server1(172.25.6.1)haproxy仓库内存2G
server2(172.25.6.2)Master节点CPU2核,内存2G
server3(172.25.6.3)Node节点CRU2核,内存2G
server4(172.25.6.4)Node节点CRU2核,内存2G

2.2.修改驱动

[root@server2 docker]# vim daemon.json   ##server3和server4相同

{
  "registry-mirrors" : ["https://reg.westos.org"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
[root@server2 docker]# systemctl daemon-reload
[root@server2 docker]# systemctl restart docker.service
[root@server2 docker]# docker info  ##同server3,server4

请添加图片描述

2.3.禁用swap分区

[root@server2 ~]# swapoff -a 
[root@server2 ~]# vim /etc/fstab  ##禁止开机自启

请添加图片描述

2.4.安装部署软件kubeadm

2.4.1mirrors.aliyun镜像仓库搭建

[root@server2 yum.repos.d]# vim k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
注:server4与server3同时搭建

请添加图片描述
请添加图片描述

2.4.2.相关组件安装

注:kubeadm:用来初始化集群的指令
kubelet:在集群中的每个节点上用来启动 pod 和容器等
kubectl:用来与集群通信的命令行工具

[root@server2 ~]# yum install kubelet kubeadm kubectl   ##server4,server3同样

请添加图片描述

[root@server2 ~]# kubeadm config print init-defaults ##查看默认配置

请添加图片描述

[root@server2 ~]# systemctl enable  kubelet  ##开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

2.4.2.镜像的拉取

在master端(server2)拉取镜像,默认从k8s.gcr.io上下载组件镜像,所以需要修改镜像仓库

[root@server2 ~]# kubeadm config images list --image-repository registry.aliyuncs.com/google_containers ##列出镜像

请添加图片描述

[root@server2 ~]# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers  ##拉取镜像

请添加图片描述

:由于coredns镜像无法使用上述命令下载,故:

[root@server1 ~]#  docker pull coredns/coredns:1.8.0

请添加图片描述

2.4.3.镜像的上传

[root@server2 ~]#  docker images | grep ^reg.westos.org/k8s | awk '{system("docker push "$1":"$2"")}'

请添加图片描述

[root@server1 ~]#  docker tag  coredns/coredns:1.8.0  reg.westos.org/k8s/coredns:1.8.0

[root@server1 ~]#  docker push reg.westos.org/k8s/coredns:1.8.0

请添加图片描述

2.5.初始化集群

[root@server2 ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/k8s ##注:k8s为reg.westos.org仓库新建项目,必须设置为公开

请添加图片描述
请添加图片描述

2.5.1.添加环境变量

[root@server2 ~]# vim .bash_profile 
export KUBECONFIG=/etc/kubernetes/admin.conf  ##查看初始化命令截图(上一张),
[root@server2 ~]# source .bash_profile 
### 

请添加图片描述

2.5.2.安装flannel网络组件

2.5.2.1.镜像的下载上传

由于flannel网络组件的安装需要,需要镜像flannel

[root@server1 ~]#  docker pull quay.io/coreos/flannel:v0.14.0

请添加图片描述

[root@server1 ~]# docker tag quay.io/coreos/flannel:v0.14.0  reg.westos.org/library/flannel:v0.14.0

[root@server1 ~]# docker push reg.westos.org/library/flannel:v0.14.0

请添加图片描述

2.5.2.2.配置文件下载
[root@server2 ~]# yum install wget -y  :下载插件

请添加图片描述

[root@server2 ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml   ##配置文件kube-flannel.yml

请添加图片描述

[root@server2 ~]# vim kube-flannel.yml  ##修改配置文件,做到版本匹配

请添加图片描述

[root@server2 ~]# kubectl apply -f kube-flannel.yml   ### 应用kube-flannel.yml

请添加图片描述

2.6.加载集群

2.6.1.加入node节点

node节点所用token在初始化命令执行后会自动生成,见(初始化截图)

[root@server3 ~]# kubeadm join 172.25.6.2:6443 --token xzm8im.opz92wvm2aoepnhs --discovery-token-ca-cert-hash sha256:9c9f6115b04d958763475e8842a0bc8025a100b12e2a0dfe1b529163c8c706aa
[root@server4 ~]# kubeadm join 172.25.6.2:6443 --token xzm8im.opz92wvm2aoepnhs --discovery-token-ca-cert-hash sha256:9c9f6115b04d958763475e8842a0bc8025a100b12e2a0dfe1b529163c8c706aa

请添加图片描述

2.6.2 测试

[root@server2 ~]#  kubectl get pod --namespace kube-system  #查看 kube-system 的容器情况

请添加图片描述

[root@server2 ~]# kubectl get nodes #查看节点状态

请添加图片描述
注:节点状态,kube-system 的容器情况如上图,则表示部署完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值