我的demo是通过minikube启动的,一定要看一下1.3.1节
文章目录
第1章 Kubernetes入门 1
提示:这里可以添加本文要记录的大概内容:
提示:以下是本篇文章正文内容,下面案例可供参考
1.1 了解Kubernetes 2
在 Kubernetes 中, Service 是分布式集群架构的核心 。一个Service对象拥有如下关键
特征。
- 拥有唯一指定的名称(比如 mys ql- server )。
- 拥有一个虚拟 IP 地址 (ClusterIP 地址)和端口号 。
- 能够提供某种远程服务能力 。
- 能够将客户端对服务的访问请求转发到一组容器应用上 。
Service 的服务进程通常基于 Socket 通信方式对外提供服务。Kubernetes 能够让我们通过 Service (ClusterIP+Service Port ) 连接指定的服务 。
1.2 为什么要用Kubernetes 5
1.3 从一个简单的例子开始 7
1.3.1 环境准备 8
这里特别重要
我入门学习的环境是通过minikube启动的,对于新手来讲,直接搭建一个主从集群太困难了,我参考了很多课程,都没办法在初期直接搭建一个可用的集群,所以我创建了一个minikube环境,我们可以先学完,然后回来折腾集群。minikube的基本使用如下,对于新手,只要能执行kubectl就可以继续了。
1.3.2 启动MySQL服务 8
1.3.3 启动Tomcat应用 11
1.3.4 通过浏览器访问网页 12
对于minikube运行这个例子,有个细节要注意,我们是通过minikube启动的容器,那么需要访问minikube的主机ip才可以访问。剧透一下:你可以通过如下命令找到minikube的主机ip,但是也必须在minikube运行的虚拟机上才可以访问。进一步思考,我们是否可以使用host模式,让minikube拥有一个网段内的ip。
kubectl describe node minikube
1.4 Kubernetes的基本概念和术语 14
1.4.1 资源对象概述 14
Kubernetes主要围绕资源对象展开,术语包含两类
- 资源对象,例如 Node、Pod、Service、Volume
- 与资源有关的事物或动作,例如 Label、Annotation、Namespace、Deployment、HPA、PVC
1.4.2 集群类 15
集群(Cluster)表示由Master和Node组成的Kubernetes集群
Master
运行着以下关键进程
- api-server :对资源增删改查的唯一入口,集群控制的唯一入口
- controller-manager : 资源对象的自动化控制中心
- scheduler : 负责资源调度
- etcd :注册中心
Node
- kubelet : 负责Pod对应容器的创建、启停
- kube-proxy : Service的通信与负载均衡
- 容器运行时(如Docker): 负责容器创建和管理
查看Node信息
kubectl describe node minikube
命名空间,多租户资源隔离。Kubernetes会自动创建两个命名空间,default和kube-system。
用户创建资源对象如果没有指定命名空间,会被默认存放在default,系统相关的资源对象如网络组件、DNS组件、监控类组件等都被安装在kube-system命名空间中。
kubectl get pods # 查询default命名空间
kubectl get pods --namespace=development # 查询development命名空间
1.4.3 应用类 19
Service和Pod
Service是指无状态服务。具有一个全局唯一的虚拟ClusterIP。通过Kubernetes的DNS服务,可以实现域名到ClusterIP的DNS映射。
Pod是Kubernetes的最小调度单位。可以将多个进程一起调度和伸缩。包含一个被称为根容器的Pause容器。多个业务容器共享Pause容器的IP,共享Pause容器挂载的Volume,简化了通信和文件共享问题。
每个Pod有独立IP,集群内跨节点的两个Pod,也是可以直接通信的,这通常采用虚拟二层网络技术实现,例如Flannel。
普通Pod一旦创建,会被放入etcd中存储,随后被调度到具体Node并绑定。
静态Pod不会放入etcd,而是存放在具体Node上的具体文件中。并且只能在此Node上启动运行。
Pod IP加上容器端口组成Endpoint,代表此Pod里的一个服务对外通信地址。一个pod可以有多个Endpoint,例如对Tomcat可以暴露管理端口和服务端口两个Endpoint。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: myweb
name: myweb
spec:
replicas: 2
selector:
matchLabels:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- image: kubeguide/tomcat-app:v1
name: myweb
ports:
- containerPort: 8080 # 容器端口
env:
- name: MYSQL_SERVICE_HOST
value: 10.104.81.106
查看Pod的Event
kubectl describe pod xxx
Label与标签选择器
Label是一个key=value的键值对,其中k-v由用户指定。Label可以附加到各种资源对象上,例如Node、Pod、Service、Deployment。一个资源对象对应n个Label。
标签选择器要求同时满足多个条件。
Pod与Development
Development有两个功能,根据模板创建Pod,自动控制。
创建Development的命令:
kubectl create -f xxx-development.yaml
查看Development的命令
kubectl get developments
查看副本数量
kubectl get replicaset
Service 的 ClusterIP地址
创建一个service
kubectl create -f xxx-service.yaml
Headless Service没有ClusterIP,等同于没有转发,直接原生通信。
Service的外网访问问题
- Node IP : 真实的物理网络
- Pod IP : 虚拟二层网络
- Service IP : 集群内的地址,无法再集群外直接使用这个地址。
NodePort是解决集群外的应用访问集群内服务的常见做法。
如果需要负载均衡器,可以把Service的“type=NodePort”改为“type=LoadBalancer”
Ingress解决了多个Service共用一个对外端口的需求。
有状态集群
例如Zookeeper、mysql、Kafka。
两种解决方案:StatefulSet、Operator。
StatefulSet要与PV卷捆绑,以存储Pod状态,还要与Headless Service配合。
Operator是面向平台开发的。
批处理应用
Job,一个只运行一次的资源。
CronJob,周期性执行job。
应用配置
ConfigMap保存配置项(k=v)的一个Map。
并非简单的编程语言中的map。
类似于配置中心,而且无侵入。
- 配置文件名为key,内容为value
- 将ConfigMap挂载,调度之后配置文件会跟随。
- 内容修改之后重新获取内容并更新。
Secret用于存放敏感数据。
运维问题
HPA动态扩缩容。
1.4.4 存储类 40
包括Volume、Persistent Volume、PVC、StorageClass
静态存储:Volume定义在Pod,被容器共享。
Volume与Pod生命周期相同,和容器生命周期无关。
Kubernetes支持多种Volume
Volume包括emptyDir、hostPath、公有云Volume、其他。
动态存储:Persistent Volume、PVC、StorageClass
1.4.5 安全类 44
基于角色的访问控制权限系统–RBAC
查看集群中所有Service Account
kubectl get sa --all-namespaces
NetworkPolicy(网络策略)
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。