在云环境中(需要云供应商可以支持)创建一个集群外部的负载平衡器,并为使用该负载平衡器的 IP 地址作为 服务的访问地址。此时 ClusterIP 和
NodePort 的访问方式仍然可用。
下图中有两个服务Service A(黄色虚线)和Service B(蓝色虚线) Service A 将请求转发到 IP 为 10.10.10.1
的Pod上, Service B 将请求转发到 IP 为 10.10.10.2、10.10.10.3、10.10.10.4 的Pod上。

Service 将外部请求路由到一组 Pod 中,它提供了一个抽象层,使得 Kubernetes
可以在不影响服务调用者的情况下,动态调理容器组(在容器组失效后重新创建容器组,增加或者减少同一个 Deployment 对应容器组的数目等)。
在每个节点上都有Kube-proxy服务,Service使用其将链接路由到Pod
伸缩(Scaling)应用程序
可以通过更改deployment配置文件中的replicas项来设置开启的POD数目
在前面,我们创建了一个
Deployment,然后通过 [服务](https://kubernetes.io/docs/concepts/services-
networking/service/ “服务”)提供访问 Pod 的方式。我们发布的 Deployment 只创建了一个 Pod
来运行我们的应用程序。当流量增多导致应用程序POD负载加重后,我们需要对应用程序举行 伸缩
操作,增加POD数目来减轻负担,访问流量将会通过负载平衡在多个POD之间转发。 伸缩 的实现可以通过更改 nginx-deployment.yaml 文件中部署的 replicas(副本数)来完成
spec:
replicas: 2 #使用该Deployment创建两个应用程序实例
复制代码
执行滚动更新( Rolling Update )
当我们想对已经部署的程序举行升级更新,但又不想让程序克制,就可以使用滚动更新来实现。
滚动更新通过使用新版本的POD逐步替代旧版本POD来实现零停机更新
滚动更新是K8S默认的更新方式
service account 是由 Kubernetes API管理的账户。它们都绑定到了特定的 namespace,并由 API server 自动创建,或者通过 API 调用手动创建。Service account 关联了一套根据,存储在 Secret,这些根据同时被挂载到 pod 中,从而允许 pod 与 kubernetes API 之间的调用。( service account的利用见k8s安全部门 )
Use Account(用户账号):一样平常是指由独立于Kubernetes之外的其他服务管理的用户账号,例如由管理员分发的密钥、Keystone一类的用户存储(账号库)、乃至是包 含有用户名和密码列表的文件等。Kubernetes中不存在表现此类用户账号的对象, 因此不能被直接添加进 Kubernetes 体系中 。
k8s认证
X509 client certs
客户端证书认证,X509 是一种数字证书的格式标准,是 kubernetes 中默认开启使用最多的一种,也是最安全的一种。api-server 启动时会指定
ca 证书以及 ca 私钥,只要是通过同一个 ca 签发的客户端 x509 证书,则认为是可信的客户端,kubeadm 安装集群时就是基于证书的认证方式。
user 生成 kubeconfig就是X509 client certs方式。
Service Account Tokens
因为基于x509的认证方式相对比较复杂,不实用于k8s集群内部pod的管理。Service Account Tokens是 service account
使用的认证方式。定义一个 pod 应该拥有什么权限。一个 pod
与一个服务账户相关联,该服务账户的根据(token)被放入该pod中每个容器的文件体系树中,位于/var/run/secrets/kubernetes.io/serviceaccount/token
service account 主要包含了三个内容: namespace、token 和 ca
节点亲和性( nodeAffinity )
节点亲和性主要是用来控制 pod 要部署在哪些主机上,以及不能部署在哪些主机上的,演示一下:
检察node的 label 命令
kubectl get nodes --show-labels
复制代码
给节点打上 label 标签
kubectl label nodes k8s-node01 com=justtest
node/k8s-node01 labeled
复制代码
当node 被打上了相关标签后,在调理的时候就可以使用这些标签了,只需要在 Pod 的spec字段中添加 nodeSelector 字段
apiVersion: v1
kind: Pod
metadata:
name: node-scheduler
spec:
nodeSelector:
com: justtest
复制代码
Pod 亲和性( podAffinity )
pod 亲和性主要处理的是 pod 与 pod 之间的关系,好比一个 pod 在一个节点上了,那么另一个也得在这个节点,或者你这个 pod
在节点上了,那么我就不想和你待在同一个节点上。
污点与容忍度 节点亲和性 是 Pod的一种属性,它使 Pod 被吸引到一类特定的节点。 污点(Taint)则相反——它使节点可以或许排斥一类特定的 Pod。
污点标记选项: