Ingress同一域名不通请求路径
这种配置常用于一个网站通过不同的路径提供不同服务的场景。
需求对 http://my.nginx.test/hello-k8s 的访问将被路由到后端名为”hello-k8s-svc” 的Service。
对 http://my.nginx.test/hello-world 的访问将被路由到后端名为”hello-world-svc” 的Service。
ingress.yaml如下:
12345678910111213141516171819apiVersion: extensions/v1beta1kind: Ingressmetadata: name: nginx-test annotations: kubernetes.io/ingress.class: nginxspec: rules: - host: my.nginx.test http: paths: - path: /hello-world backend: serviceName: hello-world-svc service ...
管理k8s pod日志
管理k8s应用日志
k8s系统的组件日志
k8s cluster里面部署的应用程序日志
-标准输出
-日志文件
systemd守护进程管理的组件:
journalctl -u kubelet
Pod部署的组件:
kubectl logs {pod_id} -n {namespace}
系统日志:
/var/log/messages
查看容器标准输出日志:123kubectl logs {pod_id}kubectl logs -f {pod_id}kubectl logs -f {pod_id} -c {container_id}
容器中应用日志可以使用emptyDir数据卷将日志文件持久化到宿主机上
创建映射pod日志yaml:1234567891011121314151617181920212223242526272829apiVersion: v1kind: Namespacemetadata: name: cka labels: app: cka---a ...
Metrics Server监控集群资源
监控集群资源利用率Metrics Server部署:部署完成之后不会瞬间可以top到资源的利用率,因为抓取数据是周期性的不是实时性的;
12345678910111213141516171819wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yamlvi components.yaml containers: - name: metrics-server image: lizhenliang/metrics-server:v0.3.7 imagePullPolicy: IfNotPresent args: - --cert-dir=/tmp - --secure-port=4443 # 添加如下: - --kubelet-insecure-tls - --kubelet-preferred-address ...
StateFulSet
StatefulSet特性:
部署有状态应用
解决Pod独立生命周期,保持Pod启动顺序和唯一性
1、稳定,唯一的网络标识符,持久存储
2、有序,优雅的部署和扩展、删除和终止
3、有序,滚动更新
稳定得网络ID
使用Headless Service(相比普通得Service只是将spec.clusterIP定义为Node)来维护Pod网络身份;
DNS解析名称:...svc.cluster.local
稳定的存储
Statefulset得存储卷使用VolumeClaimTemplate创建,成为卷申请模板,当statefulset使用VolumeClaimTemplate创建一个PersistentVolume时,同样也会为每个Pod分配并创建一个编号得PVC;
StatefulSet-Pod部署12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758[root@pool1 k8s_yaml]# vi statefuls ...
Static Pod(静态Pod)
静态Pod特点:
Pod由特定节点上的kubelet来管理
不能使用控制器
Pod名称标识为当前节点名称
查看静态Pod存放路径123cat /var/lib/kubelet/config.yaml | grep staticPodseaticPodPath: /etc/kubernetes/manifests# 将Pod yaml文件放到manifests目录下kubelet会自动创建
Horizontal Pod Autoscaling(HPA)
HPA简介在前面的学习中我们使用用一个 kubectl scale 命令可以来实现 Pod 的扩缩容功能,但是这个毕竟是完全手动操作的,要应对线上的各种复杂情况,我们需要能够做到自动化去感知业务,来自动进行扩缩容。为此,Kubernetes 也为我们提供了这样的一个资源对象:Horizontal Pod Autoscaling(Pod 水平自动伸缩),简称HPA,HPA 通过监控分析一些控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量
我们可以简单的通过 kubectl autoscale 命令来创建一个 HPA 资源对象,HPA Controller默认30s轮询一次(可通过 kube-controller-manager 的--horizontal-pod-autoscaler-sync-period 参数进行设置),查询指定的资源中的 Pod 资源使用率,并且与创建时设定的值和指标做对比,从而实现自动伸缩的功能。
在配置HPA前,需要先部署Metrics-Server,需要Metrics-Server提供 资源信息;
部署Pod123456789 ...
Job And CronJob
Job And CronJob简介我们在日常的工作中经常都会遇到一些需要进行批量数据处理和分析的需求,当然也会有按时间来进行调度的工作,在我们的 Kubernetes 集群中为我们提供了 Job 和 CronJob 两种资源对象来应对我们的这种需求。
Job 负责处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。而CronJob 则就是在 Job 上加上了时间调度。
Job先创建一个Job资源对象
1234567891011121314151617[root@pool1 Job_CronJob]# vi Job.yaml apiVersion: batch/v1kind: Jobmetadata: name: job-demospec: template: spec: restartPolicy: Never containers: - name: counter image: centos:7 imagePullPolicy: IfNotPresent comman ...
ReplicaSet
ReplicaSet 控制器前面我们一起学习了 Pod 的原理和一些基本使用,但是在实际使用的时候并不会直接使用 Pod,而是会使用各种控制器来满足我们的需求,Kubernetes 中运行了一系列控制器来确保集群的当前状态与期望状态保持一致,它们就是 Kubernetes 的大脑。例如,ReplicaSet 控制器负责维护集群中运行的 Pod 数量;Node 控制器负责监控节点的状态,并在节点出现故障时及时做出响应。总而言之,在 Kubernetes 中,每个控制器只负责某种类型的特定资源。
控制器Kubernetes 控制器会监听资源的 创建/更新/删除 事件,并触发 Reconcile 函数作为响应。整个调整过程被称作 “Reconcile Loop”(调谐循环) 或者 “Sync Loop”(同步循环)。Reconcile 是一个使用资源对象的命名空间和资源对象名称来调用的函数,使得资源对象的实际状态与 资源清单中定义的状态保持一致。调用完成后,Reconcile 会将资源对象的状态更新为当前实际状态。我们可以用下面的一段伪代码来表示这个过程:
123456789for & ...
Kubernetes对接外部Ceph集群
静态挂载Ceph RBDk8s挂载Ceph RBD有两种方式,一种是传统的PV&PVC的方式,也就是说需要管理员先预先创建好相关PV和PVC,然后对应的deployment或者replication来挂载PVC使用。而在k8s 1.4以后,kubernetes提供了一种更加方便的动态创建PV的方式,即StorageClass。使用StorageClass时无需预先创建固定大小的PV来等待使用者创建PVC使用,而是直接创建PVC即可使用。
创建ceph存储池及块存储image1234567[root@v86a5soqgn7i23h ceph]# ceph osd pool create data 64 64pool 'data' created[root@v86a5soqgn7i23h ceph]# ceph osd lspools1 data,[root@v86a5soqgn7i23h ceph]# rbd create data/data --size 4096 --image-feature layering[root@v86a5soqgn7i23h ...
创建Pod工作流程
创建一个Pod的工作流程:注:创建Pod不会调用controller组件,controller组件只负责控制器中pod的期望状态
1、kubectl将请求提交到apiserver,然后会将请求的数据写入etcd;
2、apiserver通知scheduler根据算法进行Pod调度;
3、在调度过程中会给pod做一个标记,运行在那个节点当中;
4、apiserver再将scheduler的调度结果写入etcd;
5、根据调度节点上的kubelet从apiserver获取pod相关信息;
6、kubelet调用docker api创建pod容器,并将pod状态返回给apiserver;
7、apiserver会把pod状态再写入etcd;
12kubectl run nginx --image=nginxkubectl get pods
