一、Kubernetes简介

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

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

Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

Kubernetes的好处:

  • 隐藏资源管理和错误处理,用户仅需要关注应用的开发。

  • 服务高可用、高可靠。

  • 可将负载运行在由成千上万的机器联合而成的集群中。

1.kubernetes设计架构

Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。

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设计理念和功能其实就是一个类似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部署

参考官网

  • 关闭节点的selinux和iptables防火墙

  • 所有节点部署docker引擎

  • 所有节点都一样server2 server3 server4

修改驱动

[root@server2 docker]# vim daemon.json
{"registry-mirrors": ["https://reg.westos.org"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2","storage-opts": ["overlay2.override_kernel_check=true"]
}
[root@server2 docker]# systemctl daemon-reload
[root@server2 docker]# systemctl restart docker.service
docker info 查看驱动是否变成了systemd形式的


注意: 如果修改完之后重启失败,按照以下操作完成再次重启即可

[root@server3 ~]# cd /etc/systemd/system/docker.service.d
[root@server3 docker.service.d]# ls
10-machine.conf
[root@server3 docker.service.d]# rm -fr 10-machine.conf

禁用swap分区

每个节点都需要做

#swapoff -a
注释掉/etc/fstab文件中的swap定义     防止开机自启

安装部署软件kubeadm

[root@server2 ~]# cd /etc/yum.repos.d/
[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

此前如果配置了Centos的源,请先将它禁用,以免下载服务时有依赖性的影响。
每个节点操作一样

[root@server2 ~]# yum install kubelet kubeadm kubectl
[root@server2 ~]# systemctl enable --now kubelet
[root@server2 yum.repos.d]# scp k8s.repo server3:/etc/yum.repos.d/
[root@server2 yum.repos.d]# scp k8s.repo server4:/etc/yum.repos.d/
[root@server2 ~]# kubeadm config print init-defaults              ## //查看默认配置信息



默认从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
## 拉取镜像


初始化集群

[root@server2 ~]#  kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers--pod-network-cidr=10.244.0.0/16   //使用flannel网络组件时必须添加
--kubernetes-version    //指定k8s安装版本

安装flannel网络组件

https://github.com/coreos/flannel
链接: kube-flannel.yml 提取码: s452

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

如果下载失败,在网盘自行提取

[root@server2 ~]# kubectl get pod --namespace kube-system


加入网络插件之后,状态就会变成ready

[root@server2 etc]# kubectl get nodes

为了方便,我们直接将需要的镜像打包,发送给集群其他节点,让其本地拉取就行

[root@server2 ~]# docker save quay.io/coreos/flannel:v0.12.0-amd64 registry.aliyuncs.com/google_containers/pause:3.2 registry.aliyuncs.com/google_containers/coredns:1.7.0 registry.aliyuncs.com/google_containers/kube-proxy:v1.20.2 > node.tar
[root@server2 ~]# scp  node.tar server3:~/
[root@server2 ~]# scp  node.tar server4:~/
[root@server3 ~]# docker load -i node.tar
[root@server4 ~]# docker load -i node.tar

在server3 server4执行,初始化之后生成的。按照实际添加。

kubeadm join 172.25.1.2:6443 --token 3jc2ts.iby7sspiql1atfj2 \--discovery-token-ca-cert-hash sha256:e5d5e3660a96182995168d4d35199c7cc451601453fe074957de6bf023e1cecc

最后在master端查看节点状态

[root@server2 ~]# kubectl get nodes
NAME      STATUS   ROLES                  AGE   VERSION
server2   Ready    control-plane,master   27m   v1.20.2
server3   Ready    <none>                 26m   v1.20.2
server4   Ready    <none>                 26m   v1.20.2



如果查询状态,以及pod 等都显示正常,到这里集群部署就结束了。

Kubernetes集群部署相关推荐

  1. kubernetes 集群部署

    kubernetes 集群部署 环境 JiaoJiao_Centos7-1(152.112) 192.168.152.112 JiaoJiao_Centos7-2(152.113) 192.168.1 ...

  2. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(三

    在上文ASP.NET Core应用程序容器化.持续集成与Kubernetes集群部署(二)中,我介绍了如何使用Azure DevOps为ASP.NET Core应用程序案例:tasklist搭建持续集 ...

  3. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)

    在上文中我介绍了ASP.NET Core应用程序容器化时需要注意的几个问题,并给出了一个案例应用程序:tasklist.今天接着上文的内容,继续了解一下如何使用Azure DevOps进行ASP.NE ...

  4. Kubernetes集群部署实录

    空降助手 环境准备 服务器配置信息 部署版本信息 关闭防火墙 禁用SELinux 关闭swap 修改hostname 配置hosts文件 runtime安装(docker安装) 安装记录 kubead ...

  5. 基于Kubernetes集群部署完整示例——Guestbook

    本文依赖环境:Centos7部署Kubernetes集群.基于Kubernetes集群部署skyDNS服务 该示例中,我们将创建一个redis-master.两个redis-slave.三个front ...

  6. kubernetes集群部署(四):部署heapster+influxdb

    在上一篇<kubernetes集群部署(三):部署dashboard服务>中,我们部署了dashboard,但这个dashboard页面看上去好像少了点什么,没有cup和内存使用监控图表. ...

  7. 02:Kubernetes集群部署——平台环境规划

    1.官方提供的三种部署方式: minikube: Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于尝试Kubernetes或日常开发的用户使用. 部署地址:http ...

  8. 高可用 kubernetes 集群部署实践

    前言 Kubernetes(k8s) 凭借着其优良的架构,灵活的扩展能力,丰富的应用编排模型,成为了容器编排领域的事实标准.越来越多的企业拥抱这一趋势,选择 k8s 作为容器化应用的基础设施,逐渐将自 ...

  9. Kubernetes集群部署篇( 一)

    K8S集群部署有几种方式:kubeadm.minikube和二进制包.前两者属于自动部署,简化部署操作,我们这里强烈推荐初学者使用二进制包部署,因为自动部署屏蔽了很多细节,使得对各个模块感知很少,非常 ...

最新文章

  1. Mysql提示缺少表的别名报错_mysql对sql中别名引起的Column not found问题
  2. hql中获取前一天的数据_oracle实现动态查询前一天早八点到当天早八点的数据功能示例...
  3. linux c remove 删除文件或目录函数
  4. 清华大学冯珺:基于强化学习的关系抽取和文本分类 | 实录·PhD Talk
  5. list转datatable
  6. 【原创】MySQL 返回更新值(RETURNING)
  7. IPRO_DOCXCC_EXTRACT_PARTBODY
  8. 最小生成树构造算法--Prim算法,Kruskal算法(C语言)
  9. php curl 下载图片 花,PHP curl下载图片的方法
  10. python输入输出有问题_Python中的输入与输出
  11. Leetcode每日一题:976.largest-perimeter-triangle(三角形的最大周长)
  12. Android开发笔记(五十三)远程接口调用AIDL
  13. 在mc中直接加aswing组件,该组件还需最后用validate()方法
  14. WLAN射频、信道与帧分类
  15. CreateInstance 方法解析
  16. Python:学习笔记之PyQt5
  17. 《解决nPlayer卡顿,玩转WebDAV》
  18. 企业网上下单订货管理软件源码搭建功能介绍|移讯云订货通订单管理系统
  19. 【1383】手机短号(多实例测试)
  20. 时间序列分析_餐厅销量预测_2022_5_14

热门文章

  1. java常见笔试_Java 常见笔试题(2)
  2. windows2008文件服务器端口,windows server 2008 文件服务器不定期出现大量CLOSE_WAIT状态的连接,必须重启服务器,客户端才能访问共享。...
  3. 深度学习总结:GAN 和 conditiaoal GAN
  4. 最长公共子序列和追踪解
  5. 几种string格式化输出的方式
  6. go genetlink demo
  7. [TCP/IP] 关闭连接后为什么客户端最后还要等待2MSL
  8. 查看Unity工程版本
  9. Windows系统CMD下常用命令
  10. jquery----js/css 导入