kubernetes知识
1.kubernetes是一个开源的容器编排系统,可实现容器化应用程序的自动部署,水平扩展和管理。
2.minikube可以搭建本地集群环境。minikube,它一个用于快速开发的单机k8s环境,拥有与k8s集群完全相同的功能。host01作为master节点也是node节点。
minikube start:启动
kubectl version:查看集群版本
kubectl cluster-info:详细版本信息
kubectl run first-app --image=nginx --port=80 创建名为first-app的deployment,使用nginx镜像,并指定端口为80
kubectl get pod:查看当前的pod
kubectl describe pod first-app:查看更详细的pod内容
kubectl expose deployment/first-app --type="NodePort" --port=80:对外发布服务
kubectl get svc first-app:查看发布的服务
kubectl scale deployment/first-app --replicas=3 应用的扩展和缩小
kubectl set image deployment/first-app first-app=nginx:1.10 更新应用、滚动升级
kubectl delete deployment/first-app 删除应用
kubectl rollout: 资源回滚
3.kubernetes中,用deployment来声明和管理pod,每个pod里面至少包含一个container。
4.Pod的IP是不稳定的,需要Service来解决这个问题。Service能发现并维护好pod的IP列表。service对外提供了多种入口:
a.ClusterIP: Service在集群内的唯一ip地址
b.NodePort: Service会在集群的每个Node上启动一个端口,通过端口访问
c.LoadBalancer: 在NodePort基础上,借助公有云环境创建一个外部的负载均衡器,并将请求转发到NodeIP:NodePort
d.ExternalName: 将服务通过DNS CNAME记录方式转发到指定的域名。
5.滚动升级是Kubernetes中最典型的服务升级方案,主要思路是一边增加新版本应用的实例数,一边减少旧版本应用的实例数,知道新版本的实例数达到预期,旧版本的实例数减少为0,滚动升级结束。整个过程,服务一直处于可用状态,并且可在任意时刻回滚到旧版本。
6.Helm是kubernetes的包管理器,主要用来管理Charts。Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件。可以在部署应用的时候自定义应用程序的一些Metadata。
7.master节点上的组件:API Server(各类资源的增删改查以及watch等接口,集群控制入口进程),Scheduler(资源调度器)、Controller-Manager(资源对象控制管理器)。
node节点上的组件:Kubelet(节点代理,与master节点协作),容器运行时(运行容器的软件,一般是docker引擎),kube-proxy(网络代理,负责通信和负载均衡)。
8.Pod:kubernetes管理和调度的最小单位是Pod,Pod包含一组容器和卷,共享一个网络命名空间。
9.Label:用来传递用户定义的属性,可以把关系紧密的容器分为一类。
10.Service:定义了Pod和访问Pod策略的抽象。service服务有个特点,如果端口暴露类型为NodePort,那么可以通过集群内任意一台主机加暴露的端口进行访问。
11.Deployment:应用管理者,Deployment描述了一个部署。在Kubernetes中,并不推荐直接启动Pod,也不推荐使用Replica Set,而建议直接使用Deployment。通过在Deployment中描述所期望的Pod、版本和副本数量,就可以实现管理、滚动升级、回滚、扩容、缩容等复杂的操作。Deployment与Pod并非是包含关系,而是相互独立的。Deployment通过“标签匹配”,可以关联若干Pod。
12.kubectl:命令行客户端。Replication Controller:确保任意时间都有指定数量的Pod副本运行。
13.kubernetes集群需要三个网络,物理主机网卡所在网络称为主机节点网络,service上有个IP地址,此IP地址是虚拟的,只存在于iptables或ipvs中,此网络称为service网络,Pod所在网络称为pod网络。
14.通信:同一个Pod内的多个容器共享网络名称空间,可以使用IO回环地址通信;各Pod之间通信通过隧道转发报文来实现叠加网络(Overlay Network) 来通信;Pod与Service之间通信是通过iptables或ipvs规则调度
15.Replica Set:高可用、高性能是分布式系统中常见的问题。一般都可以采用增加冗余节点的方式解决,Replica Set通过标签关联Pod,并可以设置一个副本数,以实现微服务的冗余。ReplicaSet 是下一代的 Replication Controller。 ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持。ReplicaSet 支持新的基于集合的选择器需求,这在标签用户指南中有描述。而 Replication Controller 仅支持基于相等选择器的需求。
16.etcd:是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。
17.Kubernetes 支持多个容器运行环境: Docker、 containerd、cri-o、 rktlet 以及任何实现 Kubernetes CRI (容器运行环境接口)。