热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

k8sKubernetes集群部署

文章目录

文章目录

  • 前言
  • 一、Kubernetes简介与架构
    • 1.Kubernetes简介
    • 2.kubernetes设计架构
  • 二、Kubernetes集群部署
    • 1.集群环境初始化
    • 2.所有节点安装kubeadm
    • 3.拉取集群所需镜像
    • 3.集群初始化
    • 4.安装flannel网络插件
    • 5.扩容节点
    • 6.设置kubectl命令补齐




前言


一、Kubernetes简介与架构

1.Kubernetes简介


在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。
Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。
Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。
Kubernetes的好处:
隐藏资源管理和错误处理,用户仅需要关注应用的开发。
服务高可用、高可靠。
可将负载运行在由成千上万的机器联合而成的集群中。


2.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外部&内部
  • Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
  • Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等


二、Kubernetes集群部署

官方网址:https://v1-23.docs.kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

在这里插入图片描述

主机名ip角色
k8s1192.168.117.11reg.westos.org,harbor仓库
k8s2192.168.117.12master,k8s集群控制节点
k8s3192.168.117.13node,k8s集群工作节点
k8s4192.168.117.14node,k8s集群工作节点

所有节点禁用selinux和防火墙
所有节点同步时间和/etc/hosts解析
所有节点安装docker-ce
所有节点禁用swap,注意注释掉/etc/fstab文件中的定义

1.集群环境初始化

所有k8s集群节点执行以下步骤
禁用swap
[root@k8s2 ~]# swapoff -a
[root@k8s2 ~]# vim /etc/fstab
#/dev/mapper/rhel-swap swap swap defaults 0 0
在这里插入图片描述
修改内核参数
[root@k8s2 sysctl.d]# vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1

[root@k8s2 ~]# sysctl --system
在这里插入图片描述
[root@k8s2 ~]# vim /etc/yum.repos.d/docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/gpgcheck=0

[centos]
name=extras
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/
gpgcheck=0
在这里插入图片描述
安装docker-ce
[root@k8s2 ~]# yum install -y docker-ce
[root@k8s2 ~]# systemctl enable --now docker

[root@k8s2 ~]# vim /etc/docker/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”
}

[root@k8s2 ~]# systemctl restart docker

所有节点同步docker配置,以及拷贝harbor仓库的证书
证书为之前实验是在server1生成
[root@k8s1 ~]# cd /etc/docker/
[root@k8s1 docker]# ls
certs.d
[root@k8s1 docker]# scp -r certs.d/ k8s2:/etc/docker/
[root@k8s1 docker]# scp -r certs.d/ k8s3:/etc/docker/
[root@k8s1 docker]# scp -r certs.d/ k8s4:/etc/docker/

所有节点添加仓库的地址解析
在这里插入图片描述
确保所有k8s节点可以从私有仓库下载镜像
注:可以在仓库页面查看日志,确保所有节点可以拉取
[root@k8s2 docker]# docker pull nginx

2.所有节点安装kubeadm

[root@k8s2 yum.repos.d]# vim /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
在这里插入图片描述
[root@k8s2 ~]# yum install -y kubelet-1.23.17-0 kubeadm-1.23.17-0 kubectl-1.23.17-0

[root@k8s2 ~]# systemctl enable --now kubelet

3.拉取集群所需镜像

[root@k8s2 ~]# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
在这里插入图片描述
登录仓库
[root@k8s2 ~]# docker login reg.westos.org
Username: admin
Password:
先在harbor仓库上新建一个项目
在这里插入图片描述
上传镜像
[root@k8s2 ~]# docker images |grep google_containers | awk ‘{print $1":"$2}’ | awk -F/ ‘{system(“docker tag “$0” reg.westos.org/k8s/”$3"")}’

[root@k8s2 ~]# docker images |grep k8s | awk ‘{system(“docker push “$1”:”$2"")}’
在这里插入图片描述

3.集群初始化

[root@k8s2 ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/k8s --kubernetes-version v1.23.17
在这里插入图片描述

设置环境变量
[root@k8s2 ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
注意:没有设置变量会有以下报错
在这里插入图片描述
写入环境变量文件,确保重启后依然生效
[root@k8s2 ~]# vim .bash_profile
export KUBECONFIG=/etc/kubernetes/admin.conf
在这里插入图片描述
查看集群状态
[root@k8s2 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s2 NotReady control-plane,master 74s v1.23.17
当前节点还没有就绪,是因为没有安装网路插件,pod还没运行

[root@k8s2 ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-7b56f6bc55-b495q 0/1 Pending 0 79s
kube-system coredns-7b56f6bc55-ch2ts 0/1 Pending 0 79s
kube-system etcd-k8s2 1/1 Running 0 92s
kube-system kube-apiserver-k8s2 1/1 Running 0 92s
kube-system kube-controller-manager-k8s2 1/1 Running 0 92s
kube-system kube-proxy-7ckfn 1/1 Running 0 79s
kube-system kube-scheduler-k8s2 1/1 Running 0 92s

4.安装flannel网络插件

下载flannel网络插件
[root@server2 ~]# yum install -y wget
[root@server2 ~]# wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
修改镜像位置
[root@k8s2 ~]# vim kube-flannel.yml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
新建项目仓库
在这里插入图片描述
下载镜像
[root@k8s1 docker]# docker pull docker.io/flannel/flannel:v0.21.2
[root@k8s1 docker]# docker pull docker.io/flannel/flannel-cni-plugin:v1.1.2
上传镜像
[root@k8s1 docker]# docker images |grep flannel | awk ‘{print $1":"$2}’ | awk ‘{system(“docker tag “$0” reg.westos.org/”$0"")}’

[root@k8s1 docker]# docker push reg.westos.org/flannel/flannel:v0.21.2
[root@k8s1 docker]# docker push reg.westos.org/flannel/flannel-cni-plugin:v1.1.2
确保镜像上传成功
在这里插入图片描述
部署网络插件
[root@k8s2 ~]# kubectl apply -f kube-flannel.yml
namespace/kube-flannel created
serviceaccount/flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

[root@k8s2 ~]# kubectl -n kube-flannel get pod
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-6gnh4 1/1 Running 0 11s[root@k8s2 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s2 Ready control-plane,master 14m v1.23.17[root@k8s2 ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-6gnh4 1/1 Running 0 20s
kube-system coredns-7b56f6bc55-b495q 1/1 Running 0 14m
kube-system coredns-7b56f6bc55-ch2ts 1/1 Running 0 14m
kube-system etcd-k8s2 1/1 Running 0 14m
kube-system kube-apiserver-k8s2 1/1 Running 0 14m
kube-system kube-controller-manager-k8s2 1/1 Running 0 14m
kube-system kube-proxy-7ckfn 1/1 Running 0 14m
kube-system kube-scheduler-k8s2 1/1 Running 0 14m

5.扩容节点

以下两条命令为3.集群初始化时在server2生成,复制在server3、server4直接使用即可

[root@k8s3 ~]# kubeadm join 192.168.56.12:6443 --token u9a137.tll3mwnlqgc74gll \
> --discovery-token-ca-cert-hash sha256:01198c9ecacf6d15068debb4cd4fddf8ac0fa1dba65c3b049c5dc1761c355e02[root@k8s4 ~]# kubeadm join 192.168.56.12:6443 --token u9a137.tll3mwnlqgc74gll \
> --discovery-token-ca-cert-hash sha256:01198c9ecacf6d15068debb4cd4fddf8ac0fa1dba65c3b049c5dc1761c355e02[root@k8s2 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s2 Ready control-plane,master 16m v1.23.17
k8s3 Ready 52s v1.23.17
k8s4 Ready 46s v1.23.17

6.设置kubectl命令补齐

[root@k8s2 ~]# yum install -y bash-completion
[root&#64;k8s2 ~]# echo “source <(kubectl completion bash)” >> ~/.bashrc
[root&#64;k8s2 ~]# source ~/.bashrc
在这里插入图片描述
kubectl命令指南
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands



推荐阅读
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文总结了近年来在实际项目中使用消息中间件的经验和常见问题,旨在为Java初学者和中级开发者提供实用的参考。文章详细介绍了消息中间件在分布式系统中的作用,以及如何通过消息中间件实现高可用性和可扩展性。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在Kubernetes上部署多个Mitmproxy代理服务器以实现高效流量管理 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文详细记录了 MIT 6.824 课程中 MapReduce 实验的开发过程,包括环境搭建、实验步骤和具体实现方法。 ... [详细]
  • 本文介绍了如何将Spring属性占位符与Jersey的@Path和@ApplicationPath注解结合使用,以便在资源路径中动态解析属性值。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • Docker 中创建 CentOS 容器并安装 MySQL 进行本地连接
    本文详细介绍了如何在 Docker 中创建 CentOS 容器,并在容器中安装 MySQL 以实现本地连接。文章内容包括镜像拉取、容器创建、MySQL 安装与配置等步骤。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 大家好,全新的技术专栏《从零开始掌握容器云网络实战》正式上线。该专栏将系统地介绍容器云网络的基础知识、核心技术和实际应用案例,帮助读者全面理解和掌握容器云网络的关键技术与实践方法。 ... [详细]
author-avatar
小旋律丶_409
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有