- 第一章 k8s 介绍
- 应用部署方式的演变
- K8s 简介
- k8s 组件
- k8s 中的一些概念
- k8s 安装
- k8s 集群介绍
- k8s 安装方式
- k8s 部署应用
- k8s 资源管理
- 资源管理介绍
- 资源管理方式
传统部署: app 直接在操作系统之上进行部署。
虚拟化部署: 一台物理机上虚拟化多个虚拟机。 每个虚拟机都是独立的环境。
容器化部署: 与虚拟化相似,但共享了操作系统。
虚拟化部署,与容器化部署程序直接相互隔离,但是虚拟化每个隔离之间都需要操作系统,比较消耗系统的资源。
容器化部署可以跨云服务商,跨linux 操作系统进行发布。且每个容器拥有自己的文件系统,cpu,内存,进程空间。app 所需要的资源由容器来提供。
容器存在的问题:
1 一个容器故障宕机了,如何让另外一个容器去替补停机的容器。
2 当并发量增大的时候,如何去横向扩展容器的数量。
容器管理的问题可以统称为容器的编排问题,k8s: google开源的容器编排工具。
SWarm : docker 自己的编排工具。
K8s 简介k8s 的本质是一组服务器集群,在集群的每一个节点上运行特定的程序。对节点中的容器进行管理。目的是实现资源管理的自动化。
k8s 组件一个k8s 集群是由控制节点(master)和 工作节点(node ),每个节点上都会安装不同的组件。
举例说明,向ApiServer 发送请求,请求运行一个nginx,则通过Scheduler 进行计算,Controller-manager进行调度,假设nginx 服务运行在pod 节点上了。Etecd 记录nginx 服务相关元数据。
一旦k8s环境启动之后,master 和node 都会将自身的信息存储到etcd 数据库中
Node 节点正真干活的(工作负载节点,node 节点上的docker 负责容器的运行), kubelet 接受控制节点发送过来的信息,将信息发送给相应的docker,来执行各种操作。
kube-proxy 客户端访问接口。一个nginx 服务运行了,如果要访问nginx ,就需要kube-proxy 来对pod 产生访问的代理。
k8s 中的一些概念pod 是k8s 中的最小控制单元, 容器必须跑到pod 中。pod 中至少要有一个容器 k8s 是通过控制pod,然后再去控制容器的。
Controller: k8s 中有各种类型的 Controller。
Label 标签: 用于对pod 进行分类,同一类pod 会拥有相同的标签。
Service: pod 对外服务的统一入口
NameSpace: 命名空间,用来隔离pod 的运行环境。Docker 也使用namspce 来隔离环境
k8s 安装如果无法启动多个集群,建议使用官网的交互式环境。
k8s 集群介绍k8s 集群一般分为两类,一主多从,和多主多从。
一主多从: 一个Master 节点,多个Node 节点,但存在单点故障等问题。常用于测试环境。
多主多从: 多个Mater节点,多个Node节点。搭建麻烦,但是安全性高,常用于生产环境。
k8s 安装方式k8s 有多种部署方式,目前比较主流的方式有: kubeadm ,Minkube 二进制包
官网Minikube 部署方式
Minbikube: 用于快速搭建单节点的k8s 集群工具。
kubeadm: 一个用于快速搭建k8s集群工具。
二进制包: 从官网下载每个组件的二进制包,依次去安装,此方式对理解k8的组件更为有效。
Minikube 进行部署集群:
这里使用Minikube 进行部署集群。
下载minikube之后,输入下面命令。
1 minikube version
2 minikube start 启动k8s 集群
3 kubectl version
4 kubectl cluster-info
5 kubectl get nodes
kubeadm 安装 k8s 集群:
k8s 部署应用1 查看操作系统的版本,使用kubeadm 安装k8s集群,要求centos 的版本要在7.5 及以上。
cat /etc/redhat-release
2 主机名解析
编辑三套服务器的 /etc/hosts 文件,添加服务器对应的ip地址和 主机名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2aFuXpwj-1636808215928)(D:java workstation笔记浪潮imagesimage-20211113194514224.png)]
3 时间同步
k8s 要求节点的时间要精确一致,这里使用chronyd 服务从网络中同步时间。
3.1 启动 chronyd 服务命令 : systemctl start chronyd
3.2 设置chronyd 服务开机自启动 : systemctl enable chronyd
4 禁用iptables 和firewalld 服务(生产环境才能做)(k8s 和docker 在运行中会产生大量iptables 规则,为了不跟系统的iptables 进行混淆,直接关闭系统的iptables)
systemctl stop firewalld
systemctl disable firewalld
systemctl stop iptables
systemctl disable iptables
1 kubectl get nodes 获取节点信息(当前只有一个节点)
2 kubectl create deployment 命令部署k8s 应用
kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
该命令部署的是 kubernetes-bootcamp应用。We need to provide the deployment name and app image location (include the full repository url for images hosted outside Docker hub).
3 kubectl get deployments 查看部署的应用
在单节点上的一个应用。
4 查看应用
Pods that are running inside Kubernetes are running on a private, isolated network.By default they are visible from other pods and services within the same kubernetes cluster, but not outside that network.
翻译: Kubernetes内部运行的pod运行在一个专用的隔离网络上。默认情况下,它们可以从同一Kubernetes集群内的其他pod和 service 中看到,但不能从该网络外部看到。
Thekubectlcommand can create a proxy that will forward communications into the cluster-wide, private network. The proxy can be terminated by pressing control-C and won't show any output while its running.
4.1 `“kubectl”命令可以创建一个代理,将通信转发到集群范围的专用网络。可以通过按control-C终止代理,并且在代理运行时不会显示任何输出。下面命令来生成一个代理。
echo -e “nnne[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tabn”; kubectl proxy
4.2 通过代理我们的主机与k8s 集群产生了联系。代理的节点提供了一些api 可以通过下面命令看到。
curl http://localhost:8001/version
- 3暴露接口
默认情况下,所有 Pod 只能在集群内部访问。因此要想在外部访问的话,需要做一个映射。
把容器的8080端口映射到节点的端口
kubectl expose deployment/kubernetes-bootcamp
–type=“NodePort”
–port 8080
NodePort 的意思是可以集群外部的网络进行访问。
4.4 查看服务的状态 命令 :kubectl get pods service
k8s 资源管理 资源管理介绍在k8s 中,所有内容都抽象为资源,用户需要通过操作资源来管理k8s。
k8s本质就是一个集群系统,用户可以在集群中部署各种服务,所谓部署服务就是在k8s 集群中运行一个个容器,并将指定的程序跑到容器中。
k8s 中最小的管理单位是pod 而不是容器,所以只能将容器放到pod 中,但是k8s一般不直接管理pod,而是通过pod 管理器 (Controller)来管理pod 的。
Pod 可以提供服务之后,就要考虑如何访问Pod 中的服务。K8s 提供了Service 资源实现了这个功能。
当然,pod中的程序的数据需要持久化,K8s 还提供了各种存储系统。
学习K8s的核心 就是学习如何对集群上的Pod,Pod控制器,Service,存储等各种资源进行操作。
资源管理方式1 命令式对象管理: 直接使用命令去操作k8s 的各种资源
2 命令式对象配置:通过命令配置和配置文件去操作k8s 资源。
3 声明式对象配置: 通过apply 命令和配置文件去操作k8s 资源。
Pod 是 Kubernetes 抽象出来的,表示一组一个或多个应用程序容器(如 Docker),以及这些容器的一些共享资源。这些资源包括:
- 共享存储,当作卷
- 网络,作为唯一的集群 IP 地址
- 有关每个容器如何运行的信息,例如容器映像版本或要使用的特定端口。



