安装harbor
让节点优先访问私有仓库
vim /etc/docker/daemon.json
systemctl reload docker.service
每个节点同样的操作,且都要做解析
复制证书后才能正常拉取
也可以这样直接拉取
可以将需要的镜像上传到私有仓库,然后在不同节点直接从本地私有仓库拉取,速度快
pod管理
Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群 中运行的一个进程,每个pod都有一个唯一的ip。
一个pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间 共享IPC、Network和UTC namespace。
kubectl命令:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
vim .bash_profile加了环境变量才能用kubectl命令
source .bash_profile
kubectl describe pod nginx可以查看详细信息
pod扩容与缩减
service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略, 一般把service称为微服务。
此时pod客户端可以通过service的名称访问后端的两个Pod
ClusterIP: 默认类型,自动分配一个仅集群内部可以访问的虚拟IP
使用NodePort类型暴露端口,让外部客户端访问Pod
集群内只要访问30198端口就会访问到ip,由其进行负载均衡
更新pod镜像
资源清单
删除不用的
pod生命周期
Pod 可以包含多个容器,应用运行在这些容器里面,同时 Pod 也可以有一个或 多个先于应用容器启动的 Init 容器。
Init 容器与普通的容器非常像,除了如下两点: 它们总是运行到完成。 Init 容器不支持 Readiness,因为它们必须在 Pod 就绪之前运行完成,每 个 Init 容器必须运行成功,下一个才能够运行。
如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成 功为止。然而,如果 Pod 对应的 restartPolicy 值为 Never,它不会重新启动
通过初始化容器阻塞正常容器
vim svc.yaml
探针 是由 kubelet 对容器执行的定期诊断: ExecAction:在容器内执行指定命令。如果命令退出时返回码为 0 则认为 诊断成功。 TCPSocketAction:对指定端口上的容器的 IP 地址进行 TCP 检查。如果 端口打开,则诊断被认为是成功的。 HTTPGetAction:对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于200 且小于 400,则诊断被认为是成功 的。
每次探测都将获得以下三种结果之一: 成功:容器通过了诊断。 失败:容器未通过诊断。 未知:诊断失败,因此不会采取任何行动
Kubelet 可以选择是否执行在容器上运行的三种探针执行和做出反应: • livenessProbe:指示容器是否正在运行。如果存活探测失败,则 kubelet 会 杀死容器,并且容器将受到其 重启策略 的影响。如果容器不提供存活探针, 则默认状态为 Success。
readinessProbe:指示容器是否准备好服务请求。如果就绪探测失败,端点 控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址。初 始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状 态为 Success。
startupProbe: 指示容器中的应用是否已经启动。如果提供了启动探测 (startup probe),则禁用所有其他探测,直到它成功为止。如果启动探测失 败,kubelet 将杀死容器,容器服从其重启策略进行重启。如果容器没有提 供启动探测,则默认状态为成功Success。
存活探针
探针探测失败将导致pod不断重启,如修改yaml文件探测端口为8000,直到检测成功
就绪探针
此时不会重启,但将一直为未就绪状态
就绪探针探测失败,会被微服务下线,实现动态的负载均衡,相当于svc微服务通过探针对后端pod进行一个健康检测,判断pod是否就绪。
控制器
ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet 支持 新的基于集合的选择器需求。 ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、 删除和更新的机制
ReplicaSet控制器示例
通过标签来选择pod
Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。 典型的应用场景: 用来创建Pod和ReplicaSet ,滚动更新和回滚 ,扩容和缩容, 暂停与恢复。
Deployment控制器示例:
所以层级关系为:由development创建rs,再由rs创建pod
升级和回滚
vim rs.yaml
此时kubectl get pod -o wide,curl pod的地址版本更换为v1,对于deployment而言,一个rs就是一个版本
当进行rs版本更新时,development会重新创建一个rs,把旧版本rs下的pod全部删掉,然后在新版本rs下生成指定副本数的pod。(删除旧版本rs下的pod时,rs保留,为了便于回滚,只需修改yaml文件中为旧版本,即可回滚为旧版本)
DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点 加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
DaemonSe用于分布式,一个server端,若干agent端,agent端每个节点都得布置,最后汇总到server端 。在许多节点布置相同的应用。
pod数由节点数控制,新增节点会自动加一个pod