从入门到跑路(一)为什么我们需要K8S
OpenStack是一个用于构建和管理私有云和公有云基础设施的开源项目。它由一系列相互关联的组件组成,包括计算(Nova)、网络(Neutron)、存储(Cinder、Swift)和身份认证(Keystone)等。OpenStack提供了一个完整的基础设施即服务(Infrastructure as a Service,IaaS)解决方案,允许用户通过虚拟化技术来创建和管理虚拟机、网络和存储资源。K
一、虚拟机和Docker
虚拟机和Docker(容器技术)虽然都提供了隔离环境,但它们的使用场景和优势有所不同。以下是为什么在有了虚拟机的情况下,仍然需要Docker等容器技术的几个原因:
-
轻量级:与虚拟机相比,Docker容器更加轻量级。虚拟机需要运行一个完整的操作系统实例,这需要较多的资源(CPU、内存、存储)。而Docker容器共享主机操作系统的内核,只包含应用程序和其依赖的库,启动速度更快,资源占用更少。
-
启动速度:Docker容器的启动时间通常比虚拟机短得多。虚拟机可能需要几分钟才能启动,而Docker容器可以在几秒钟内启动。这对于需要快速部署和扩展的应用场景非常重要。
-
一致性和可移植性:Docker容器可以保证在开发、测试和生产环境中运行的一致性。开发人员可以在本地创建容器,然后将其无缝地部署到任何支持Docker的平台上,而不必担心环境差异引起的问题。
-
简化的依赖管理:Docker镜像包含了应用程序运行所需的所有依赖,可以避免在不同环境中安装和配置依赖的麻烦。这种方式确保了应用程序在任何地方运行时,都有相同的依赖环境。
-
高效的资源利用:Docker容器允许在同一操作系统内核上运行多个隔离的应用程序实例,从而提高资源利用率。相比之下,虚拟机因为每个实例都运行独立的操作系统,资源开销更大。
-
开发和运维(DevOps):Docker容器与CI/CD(持续集成/持续交付)管道集成良好,可以帮助实现更高效的开发和运维流程。使用容器技术,可以更容易地进行版本控制、自动化测试、自动化部署和回滚。
-
微服务架构:Docker非常适合构建和管理微服务架构。每个微服务可以打包成一个独立的容器,彼此之间独立运行,并可以轻松地进行扩展、更新和维护。
-
隔离和安全:虽然虚拟机提供了良好的隔离,但Docker容器也通过命名空间和控制组(cgroups)等技术实现了进程级的隔离,并且安全性也在不断改进。
-
生态系统:Docker拥有丰富的生态系统,包括Docker Hub、Kubernetes等。这些工具和平台可以帮助简化容器的管理、编排和部署。
二、Docker和Kubernetes
Docker和Kubernetes(K8s)是两种互补的技术,尽管Docker可以独立使用,但Kubernetes提供了更高级的功能和管理能力。以下是为什么在有了Docker的情况下,仍然需要Kubernetes的几个原因:
-
容器编排:Docker单独运行时适合管理少量的容器,但在大规模的生产环境中,需要对成百上千的容器进行管理和协调。Kubernetes提供了容器编排功能,可以自动管理容器的部署、扩展、负载均衡和故障恢复。
-
自动化部署和扩展:Kubernetes可以根据需求自动扩展或缩减容器实例的数量。它可以根据资源使用情况动态调整容器的数量,确保应用在负载高峰期可以处理更多的请求,而在低负载时节省资源。
-
服务发现和负载均衡:Kubernetes提供了内置的服务发现和负载均衡机制。当一个容器启动或停止时,Kubernetes会自动更新服务注册表,并将流量分配到健康的容器实例。
-
自愈能力:Kubernetes具备自愈能力,可以监控容器的状态,并在容器故障或崩溃时自动重新启动或替换容器,确保应用持续运行。
-
滚动更新和回滚:Kubernetes支持滚动更新,允许在不中断服务的情况下逐步更新应用程序。当发生问题时,Kubernetes可以轻松回滚到之前的版本,减少服务中断时间。
-
配置管理和密钥管理:Kubernetes提供了ConfigMap和Secret来管理应用配置和敏感信息。这些功能使得管理和更新应用配置变得更加方便和安全。
-
持久化存储:Kubernetes支持多种持久化存储方案,可以将数据持久化到不同的存储系统,如本地存储、网络存储、云存储等。它可以自动挂载存储卷到容器,确保数据的持久性和可用性。
-
多集群管理:Kubernetes可以跨多个集群进行管理,支持在不同数据中心或云环境中运行应用。这对于需要高可用性和灾备能力的企业来说非常重要。
-
监控和日志管理:Kubernetes集成了许多监控和日志管理工具,如Prometheus、Grafana、ELK Stack等,可以帮助运维人员监控应用性能、收集日志和进行故障排查。
-
社区和生态系统:Kubernetes拥有活跃的社区和丰富的生态系统。很多现代云原生工具和平台都与Kubernetes紧密集成,提供了广泛的插件和扩展,增强了其功能和可用性。
总结来说,Docker用于创建和管理单个容器,而Kubernetes则用于在大规模生产环境中编排和管理这些容器。Kubernetes提供了自动化、可扩展、自愈和高可用性的功能,使得管理和运行容器化应用变得更加高效和可靠。在实际应用中,Docker和Kubernetes通常结合使用,以充分利用两者的优势。
三、k8s与OpenStack
观点3
OpenStack和介绍
OpenStack是一个用于构建和管理私有云和公有云基础设施的开源项目。它由一系列相互关联的组件组成,包括计算(Nova)、网络(Neutron)、存储(Cinder、Swift)和身份认证(Keystone)等。OpenStack提供了一个完整的基础设施即服务(Infrastructure as a Service,IaaS)解决方案,允许用户通过虚拟化技术来创建和管理虚拟机、网络和存储资源。
Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。它采用了分布式架构,由主节点(Master)和工作节点(Worker)组成。Kubernetes的核心组件包括API服务器、调度器、控制器和容器运行时。Kubernetes通过容器编排来管理应用程序的生命周期,并提供自动扩展、负载均衡、故障恢复等功能。
OpenStack用途
OpenStack的主要用途是构建和管理云基础设施,它适用于构建私有云或公有云平台。OpenStack提供了弹性的计算、存储和网络资源,并具备灵活的管理和配置能力。它可以满足企业对于资源池化、自助服务和弹性扩展的需求,同时提供了强大的身份认证和权限管理功能。
Kubernetes则专注于容器化应用程序的管理。它提供了一个统一的平台来管理和编排容器,使得应用程序可以在分布式环境中弹性运行。Kubernetes具有自动扩展、自愈能力和故障恢复机制,可以根据应用程序的需求自动调度和管理容器。它适用于构建微服务架构、持续交付和可伸缩的应用程序。
技术特点
OpenStack在可扩展性和灵活性方面具有优势。它可以集成多种虚拟化技术(如KVM、VMware)和存储后端(如Ceph、NFS),同时支持多种网络模式(如VLAN、SDN)。OpenStack提供了丰富的API和插件机制,可以与其他系统进行集成和扩展。
Kubernetes则注重于容器编排和自动化管理。它提供了丰富的调度策略和服务发现机制,支持容器的自动伸缩和滚动升级。Kubernetes还具有故障检测和自动修复的功能,可以确保应用程序的高可用性和稳定性。此外,Kubernetes还提供了丰富的监控和日志功能,方便用户进行系统管理和故障排查。
OpenStack和Kubernetes是两个不同领域的开源项目,分别用于构建和管理云基础设施以及容器化应用程序。OpenStack适用于构建云平台,提供弹性的计算、存储和网络资源,具备灵活的管理和配置能力。而Kubernetes则专注于容器编排和自动化管理,使得应用程序可以在分布式环境中弹性运行,具备自动扩展和故障恢复的能力。选择使用哪个技术取决于用户的需求和场景,也可以将两者结合起来,构建强大而灵活的云计算解决方案。
来源:https://www.usa-idc.com/news/idc/2023071414.shtml
观点2
Kubernetes 和 OpenStack 有何区别?
Kubernetes 和 OpenStack 都是有助于对 IT 功能进行编排和自动化(而不用改变底层硬件)的开源工具。这两个平台都支持自动部署和维护应用,但实现方式不同。 OpenStack 是利用虚拟资源池构建和管理私有云和公共云的开源基础架构平台。Kubernetes(也称为 k8s 或“kube”)是比 OpenStack 更新的技术,主要用作容器编排平台来管理容器化应用。 这种方法与您的用例能否高度适配,取决于您的具体环境和您要达成的目标。此外,您也可能需要考虑同时运行这两种技术。
使用 OpenStack 进行虚拟化
虚拟化是云计算的基础,是高效使用物理计算机硬件的过程。在虚拟化环境中,诸如存储、CPU 和 RAM 等的资源都是从各种供应商特定的项目中提取出来,并由虚拟机监控程序进行拆分,然后再按需进行分配。
虚拟机(VM)则包含自己的 OS,从而能够一次执行多个资源密集型功能。由于虚拟机的可用资源大大增加,因此它们可以抽象、拆分、复制和模拟整个服务器、操作系统、台式机、数据库和网络。
OpenStack 是一个社区开源项目,也是红帽® OpenStack® 平台的构建基础。OpenStack 作为云操作系统,可将行业标准硬件的资源虚拟化,再将其整理到云中,然后用户即可通过仪表板来管理这些资源,同时保持可扩展性和安全性。
来源:https://www.redhat.com/zh/topics/openstack/kubernetes-vs-openstack
观点1
一句话,Kubernetes 面向应用层,变革的是业务架构,而 OpenStack 面向资源层,改变的是资源供给模式。使用容器且集群规模不大,直接用 Kubenetes 就可以;集群规模大,不管应用是否只是跑在容器中,都是 OpenStack + Kubernetes 更好。
OpenStack + Kubernetes 是各取所长,并不只是因为惯性,而是对于多租户需求来说,Container(容器)的隔离性还需要加强,需要加一层 VM(虚拟机) 来弥补,而 OpenStack 是很好的方案。不过,VM + Container 的模式,必然有性能的损耗,所以 OpenStack 基金会也推出一个项目叫 Kata Containers,希望减少虚拟化的开销,兼顾容器的性能和隔离性。
永恒的只有变化,未来的业务都会运行在云上,容器是走向 DevOps、Cloud Native(云原生)的标准工具,已经开始走向平凡,而 Kubernetes 的编排能力,让容器能够落地到业务应用中,所以我们看到 Docker、Mesos、OpenStack 以及很多公有云、私有云服务商,都在支持 Kubernetes,大家都加入了 CNCF(云原生计算基金会)。
作者:网易数帆链接:https://www.zhihu.com/question/26895729/answer/298988959
四、K8S搭建
版本选择
直接看:2023年Kubernetes版本的选用对比指南-CSDN博客
搭建过程
下述两个写的都很好
详解 K8S 高可用部署_sandbox_image-CSDN博客
注意事项
使用
- 系统:ubuntu:22.04
- k8s:kubernetes-version v1.28.2
搭建需要注意下面一些小问题
镜像拉取问题
所有节点修改为阿里源
#安装curl和https传输工具
sudo apt-get install -y apt-transport-https curl
#添加官方源
sudo vim /etc/apt/sources.list
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
#添加秘钥
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt update
sudo apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated
# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
sudo systemctl enable --now kubelet
sudo systemctl status kubelet
sudo systemctl restart kubelet
/var/lib/kubelet/config.yaml为kubectl的配置文件,确保其权限配置正确
sudo chown root:root /var/lib/kubelet/config.yaml
sudo chmod 644 /var/lib/kubelet/config.yaml
sandbox_imagess问题
将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源(所有节点)
#可选将containerd升级到最新
sudo apt upgrade containerd
# 生成 containerd 的默认配置文件
sudo mkdir /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
#修改config.toml 中sandbox为3.9
sudo vim /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
#重启
sudo systemctl restart containerd
配置containerd cgroup所有节点
sudo vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
BinaryName = ""
CriuImagePath = ""
CriuPath = ""
CriuWorkPath = ""
IoGid = 0
IoUid = 0
NoNewKeyring = false
NoPivotRoot = false
Root = ""
ShimCgroup = ""
SystemdCgroup = true
而不是将systemd_cgroup = fasle修改为systemd_cgroup = true
sudo systemctl restart containerd
重置k8s
最好执行两次,不然容易不成功。
#清理主节点
#init初始不成功,清理
sudo kubeadm reset && sudo rm -rf ~/.kube/ /etc/kubernetes/* /var/lib/etcd/* /etc/cni/net.d
#清理工作节点
sudo kubeadm reset && sudo rm -rf ~/.kube/ /etc/kubernetes/* /var/lib/etcd/* /etc/cni/net.d /var/lib/rook
Pods、Deployments和Stateful
更多推荐
所有评论(0)