《重识云原生系列》专题索引:

  1. 第一章——不谋全局不足以谋一域
  2. 第二章计算第1节——计算虚拟化技术总述
  3. 第二章计算第2节——主流虚拟化技术之VMare ESXi
  4. 第二章计算第3节——主流虚拟化技术之Xen
  5. 第二章计算第4节——主流虚拟化技术之KVM
  6. 第二章计算第5节——商用云主机方案
  7. 第二章计算第6节——裸金属方案
  8. 第三章云存储第1节——分布式云存储总述
  9. 第三章云存储第2节——SPDK方案综述
  10. 第三章云存储第3节——Ceph统一存储方案
  11. 第三章云存储第4节——OpenStack Swift 对象存储方案
  12. 第三章云存储第5节——商用分布式云存储方案
  13. 第四章云网络第一节——云网络技术发展简述
  14. 第四章云网络4.2节——相关基础知识准备
  15. 第四章云网络4.3节——重要网络协议
  16. 第四章云网络4.3.1节——路由技术简述
  17. 第四章云网络4.3.2节——VLAN技术
  18. 第四章云网络4.3.3节——RIP协议
  19. 第四章云网络4.3.4节——OSPF协议
  20. 第四章云网络4.3.5节——EIGRP协议
  21. 第四章云网络4.3.6节——IS-IS协议
  22. 第四章云网络4.3.7节——BGP协议
  23. 第四章云网络4.3.7.2节——BGP协议概述
  24. 第四章云网络4.3.7.3节——BGP协议实现原理
  25. 第四章云网络4.3.7.4节——高级特性
  26. 第四章云网络4.3.7.5节——实操
  27. 第四章云网络4.3.7.6节——MP-BGP协议
  28. 第四章云网络4.3.8节——策略路由
  29. 第四章云网络4.3.9节——Graceful Restart(平滑重启)技术
  30. 第四章云网络4.3.10节——VXLAN技术
  31. 第四章云网络4.3.10.2节——VXLAN Overlay网络方案设计
  32. 第四章云网络4.3.10.3节——VXLAN隧道机制
  33. 第四章云网络4.3.10.4节——VXLAN报文转发过程
  34. 第四章云网络4.3.10.5节——VXlan组网架构
  35. 第四章云网络4.3.10.6节——VXLAN应用部署方案
  36. 第四章云网络4.4节——Spine-Leaf网络架构
  37. 第四章云网络4.5节——大二层网络
  38. 第四章云网络4.6节——Underlay 和 Overlay概念
  39. 第四章云网络4.7.1节——网络虚拟化与卸载加速技术的演进简述
  40. 第四章云网络4.7.2节——virtio网络半虚拟化简介
  41. 第四章云网络4.7.3节——Vhost-net方案
  42. 第四章云网络4.7.4节vhost-user方案——virtio的DPDK卸载方案
  43. 第四章云网络4.7.5节vDPA方案——virtio的半硬件虚拟化实现
  44. 第四章云网络4.7.6节——virtio-blk存储虚拟化方案
  45. 第四章云网络4.7.8节——SR-IOV方案
  46. 第四章云网络4.7.9节——NFV
  47. 第四章云网络4.8.1节——SDN总述
  48. 第四章云网络4.8.2.1节——OpenFlow概述
  49. 第四章云网络4.8.2.2节——OpenFlow协议详解
  50. 第四章云网络4.8.2.3节——OpenFlow运行机制
  51. 第四章云网络4.8.3.1节——Open vSwitch简介
  52. 第四章云网络4.8.3.2节——Open vSwitch工作原理详解
  53. 第四章云网络4.8.4节——OpenStack与SDN的集成
  54. 第四章云网络4.8.5节——OpenDayLight
  55. 第四章云网络4.8.6节——Dragonflow
  56. 第四章云网络4.9.1节——网络卸载加速技术综述

  57. 第四章云网络4.9.2节——传统网络卸载技术

  58. 第四章云网络4.9.3.1节——DPDK技术综述

  59. 第四章云网络4.9.3.2节——DPDK原理详解

  60. 第四章云网络4.9.4.1节——智能网卡SmartNIC方案综述

  61. 第四章云网络4.9.4.2节——智能网卡实现

  62. 第六章容器6.1.1节——容器综述

  63. 第六章容器6.1.2节——容器安装部署

  64. 第六章容器6.1.3节——Docker常用命令

  65. 第六章容器6.1.4节——Docker核心技术LXC

  66. 第六章容器6.1.5节——Docker核心技术Namespace

  67. 第六章容器6.1.6节—— Docker核心技术Chroot

  68. 第六章容器6.1.7.1节——Docker核心技术cgroups综述

  69. 第六章容器6.1.7.2节——cgroups原理剖析

  70. 第六章容器6.1.7.3节——cgroups数据结构剖析

  71. 第六章容器6.1.7.4节——cgroups使用

  72. 第六章容器6.1.8节——Docker核心技术UnionFS

  73. 第六章容器6.1.9节——Docker镜像技术剖析

  74. 第六章容器6.1.10节——DockerFile解析

  75. 第六章容器6.1.11节——docker-compose容器编排

  76. 第六章容器6.1.12节——Docker网络模型设计

  77. 第六章容器6.2.1节——Kubernetes概述

  78. 第六章容器6.2.2节——K8S架构剖析

  79. 第六章容器6.3.1节——K8S核心组件总述

  80. 第六章容器6.3.2节——API Server组件

  81. 第六章容器6.3.3节——Kube-Scheduler使用篇

  82. 第六章容器6.3.4节——etcd组件

  83. 第六章容器6.3.5节——Controller Manager概述

  84. 第六章容器6.3.6节——kubelet组件

  85. 第六章容器6.3.7节——命令行工具kubectl

  86. 第六章容器6.3.8节——kube-proxy

  87. 第六章容器6.4.1节——K8S资源对象总览

  88. 第六章容器6.4.2.1节——pod详解

  89. 第六章容器6.4.2.2节——Pod使用(上)

  90. 第六章容器6.4.2.3节——Pod使用(下)

  91. 第六章容器6.4.3节——ReplicationController

  92. 第六章容器6.4.4节——ReplicaSet组件

  93. 第六章容器基础6.4.5.1节——Deployment概述

  94. 第六章容器基础6.4.5.2节——Deployment配置详细说明

  95. 第六章容器基础6.4.5.3节——Deployment实现原理解析

  96. 第六章容器基础6.4.6节——Daemonset

  97. 第六章容器基础6.4.7节——Job

  98. 第六章容器基础6.4.8节——CronJob

1 示例:使用 StatefulSet 部署 Cassandra

本教程描述了如何在 Kubernetes 上运行 Apache Cassandra。 数据库 Cassandra 需要永久性存储提供数据持久性(应用状态)。 在此示例中,自定义 Cassandra seed provider 使数据库在接入 Cassandra 集群时能够发现新的 Cassandra 实例。

使用StatefulSet可以更轻松地将有状态的应用程序部署到你的 Kubernetes 集群中。 有关本教程中使用的功能的更多信息, 请参阅 StatefulSet。说明:

Cassandra 和 Kubernetes 都使用术语节点来表示集群的成员。 在本教程中,属于 StatefulSet 的 Pod 是 Cassandra 节点,并且是 Cassandra 集群的成员(称为 ring)。 当这些 Pod 在你的 Kubernetes 集群中运行时,Kubernetes 控制平面会将这些 Pod 调度到 Kubernetes 的 节点上。

当 Cassandra 节点启动时,使用 seed 列表来引导发现 ring 中的其他节点。 本教程部署了一个自定义的 Cassandra seed provider, 使数据库可以发现 Kubernetes 集群中出现的新的 Cassandra Pod。

1.1 教程目标

  • 创建并验证 Cassandra 无头(headless)Service。
  • 使用 StatefulSet 创建一个 Cassandra ring。
  • 验证 StatefulSet。
  • 修改 StatefulSet。
  • 删除 StatefulSet 及其 Pod。

1.2 准备开始

你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

  • Killercoda
  • 玩转 Kubernetes

要完成本教程,你应该已经熟悉 Pod、 Service 和 StatefulSet。

1.3 为 Cassandra 创建无头(headless) Services

在 Kubernetes 中,一个 Service 描述了一组执行相同任务的 Pod。

以下 Service 用于在 Cassandra Pod 和集群中的客户端之间进行 DNS 查找:application/cassandra/cassandra-service.yaml

apiVersion: v1
kind: Service
metadata: labels: app: cassandra name: cassandra
spec: clusterIP: None ports: - port: 9042 selector: app: cassandra

创建一个 Service 来跟踪 cassandra-service.yaml 文件中的所有 Cassandra StatefulSet:

kubectl apply -f https://k8s.io/examples/application/cassandra/cassandra-service.yaml

1.4 验证(可选)

获取 Cassandra Service。

kubectl get svc cassandra

响应是:

NAME         TYPE    CLUSTER-IP EXTERNAL-IP PORT(S)  AGE
cassandra ClusterIP     None     <none>     9042/TCP 45s

如果没有看到名为 cassandra 的服务,则表示创建失败。 请阅读调试服务,以解决常见问题。

1.5 使用 StatefulSet 创建 Cassandra Ring

下面包含的 StatefulSet 清单创建了一个由三个 Pod 组成的 Cassandra ring。

说明: 本示例使用 Minikube 的默认配置程序。 请为正在使用的云更新以下 StatefulSet。application/cassandra/cassandra-statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata: name: cassandra labels: app: cassandra
spec: serviceName: cassandra replicas: 3 selector: matchLabels: app: cassandra template: metadata: labels: app: cassandra spec: terminationGracePeriodSeconds: 1800 containers: - name: cassandra image: gcr.io/google-samples/cassandra:v13 imagePullPolicy: Always ports: - containerPort: 7000 name: intra-node - containerPort: 7001 name: tls-intra-node - containerPort: 7199 name: jmx - containerPort: 9042 name: cql resources: limits: cpu: "500m" memory: 1Gi requests: cpu: "500m" memory: 1Gi securityContext: capabilities: add: - IPC_LOCK lifecycle: preStop: exec: command: - /bin/sh - -c - nodetool drain env: - name: MAX_HEAP_SIZE value: 512M - name: HEAP_NEWSIZE value: 100M - name: CASSANDRA_SEEDS value: "cassandra-0.cassandra.default.svc.cluster.local" - name: CASSANDRA_CLUSTER_NAME value: "K8Demo" - name: CASSANDRA_DC value: "DC1-K8Demo" - name: CASSANDRA_RACK value: "Rack1-K8Demo" - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP readinessProbe: exec: command: - /bin/bash - -c - /ready-probe.sh initialDelaySeconds: 15 timeoutSeconds: 5 # 这些卷挂载是持久的。它们类似内联申领,但并不完全相同, # 因为这些卷挂载的名称需要与 StatefulSet 中某 Pod 卷完全匹配。 volumeMounts: - name: cassandra-data mountPath: /cassandra_data # 这些将被控制器转换为卷申领,并挂载在上述路径。 # 请勿将此设置用于生产环境,除非使用了 GCEPersistentDisk 或其他 SSD 持久盘。 volumeClaimTemplates: - metadata: name: cassandra-data spec: accessModes: [ "ReadWriteOnce" ] storageClassName: fast resources: requests: storage: 1Gi ---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata: name: fast provisioner: k8s.io/minikube-hostpath parameters: type: pd-ssd

使用 cassandra-statefulset.yaml 文件创建 Cassandra StatefulSet:

# 如果你能未经修改地应用 cassandra-statefulset.yaml,请使用此命令
kubectl apply -f https://k8s.io/examples/application/cassandra/cassandra-statefulset.yaml

如果你为了适合你的集群需要修改 cassandra-statefulset.yaml, 下载 https://k8s.io/examples/application/cassandra/cassandra-statefulset.yaml, 然后应用修改后的清单。

# 如果使用本地的 cassandra-statefulset.yaml ,请使用此命令
kubectl apply -f cassandra-statefulset.yaml

1.6 验证 Cassandra StatefulSet

1. 获取 Cassandra StatefulSet:

kubectl get statefulset cassandra

响应应该与此类似:

NAME      DESIRED CURRENT AGE
cassandra    3       0    13s

StatefulSet 资源会按顺序部署 Pod。

2. 获取 Pod 查看已排序的创建状态:

kubectl get pods -l="app=cassandra"

响应应该与此类似:

NAME        READY STATUS            RESTARTS AGE
cassandra-0 1/1   Running              0     1m
cassandra-1 0/1   ContainerCreating    0     8s

这三个 Pod 要花几分钟的时间才能部署。部署之后,相同的命令将返回类似于以下的输出:

NAME        READY STATUS  RESTARTS AGE
cassandra-0  1/1  Running    0     10m
cassandra-1  1/1  Running    0     9m
cassandra-2  1/1  Running    0     8m

3. 运行第一个 Pod 中的 Cassandra nodetool, 以显示 ring 的状态。

kubectl exec -it cassandra-0 -- nodetool status

响应应该与此类似:

Datacenter: DC1-K8Demo
======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address     Load      Tokens Owns  (effective) Host ID                     Rack
UN 172.17.0.5 83.57 KiB    32   74.0%  e2dd09e6-d9d3-477e-96c5-45094c08db0f Rack1-K8Demo
UN 172.17.0.4 101.04 KiB   32   58.8%  f89d6835-3a42-4419-92b3-0e62cae1479c Rack1-K8Demo
UN 172.17.0.6 84.74 KiB    32   67.1%  a6a1e8c2-3dc5-4417-b1a0-26507af2aaad Rack1-K8Demo

1.7 修改 Cassandra StatefulSet

使用 kubectl edit 修改 Cassandra StatefulSet 的大小。

1. 运行以下命令:

kubectl edit statefulset cassandra

此命令你的终端中打开一个编辑器。需要更改的是 replicas 字段。下面是 StatefulSet 文件的片段示例:

# 请编辑以下对象。以 '#' 开头的行将被忽略,
# 且空文件将放弃编辑。如果保存此文件时发生错误,
# 将重新打开并显示相关故障。
apiVersion: apps/v1
kind: StatefulSet
metadata: creationTimestamp: 2016-08-13T18:40:58Z generation: 1 labels: app: cassandra name: cassandra namespace: default resourceVersion: "323" uid: 7a219483-6185-11e6-a910-42010a8a0fc0
spec: replicas: 3

2. 将副本数(replicas)更改为 4,然后保存清单。

StatefulSet 现在可以扩展到运行 4 个 Pod。

3. 获取 Cassandra StatefulSet 验证更改:

kubectl get statefulset cassandra

响应应该与此类似:

NAME      DESIRED CURRENT AGE
cassandra    4       4    36m

1.8 清理现场

删除或缩小 StatefulSet 不会删除与 StatefulSet 关联的卷。 这个设置是出于安全考虑,因为你的数据比自动清除所有相关的 StatefulSet 资源更有价值。

警告:

根据存储类和回收策略,删除 PersistentVolumeClaims 可能导致关联的卷也被删除。 千万不要认为其容量声明被删除,你就能访问数据。

1. 运行以下命令(连在一起成为一个单独的命令)删除 Cassandra StatefulSet 中的所有内容:

grace=$(kubectl get pod cassandra-0 -o=jsonpath='{.spec.terminationGracePeriodSeconds}') \
&& kubectl delete statefulset -l app=cassandra \
&& echo "Sleeping ${grace} seconds" 1>&2 \
&& sleep $grace \
&& kubectl delete persistentvolumeclaim -l app=cassandra

2. 运行以下命令,删除你为 Cassandra 设置的 Service:

kubectl delete service -l app=cassandra

1.9 Cassandra 容器环境变量

本教程中的 Pod 使用来自 Google 容器镜像库 的 gcr.io/google-samples/cassandra:v13 镜像。上面的 Docker 镜像基于 debian-base, 并且包含 OpenJDK 8。

该镜像包括来自 Apache Debian 存储库的标准 Cassandra 安装。 通过使用环境变量,你可以更改插入到 cassandra.yaml 中的值。

环境变量

默认值

CASSANDRA_CLUSTER_NAME

'Test Cluster'

CASSANDRA_NUM_TOKENS

32

CASSANDRA_RPC_ADDRESS

0.0.0.0

参考链接

示例:使用 StatefulSet 部署 Cassandra | Kubernetes

StatefulSet 基础 | Kubernetes

示例:使用 StatefulSet 部署 Cassandra | Kubernetes

运行一个有状态的应用程序 | Kubernetes

Statefulset详细解析 - 不懂123 - 博客园

k8s中statefulset资源类型的深入理解

十,StatefulSet简介及简单使用 - 戴红领巾的少年 - 博客园

k8s之StatefulSet详解_最美dee时光的博客-CSDN博客_statefulset

【重识云原生】第六章容器基础6.4.10.4节——StatefulSet实操案例-使用 StatefulSet 部署Cassandra相关推荐

  1. 【重识云原生】第六章容器基础6.4.9.2节——使用 Service 连接到应用

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  2. 【重识云原生】第一章——不谋全局不足以谋一域

    云原生体系知识地图大纲: ​ 锲子 云原生概念这几年非常火爆,本人因有幸参与公司云原生转型项目调研,开始接触这一庞大技术体系,再通过与同业.各大头部云厂商超过150场的密集研讨交流,方得初窥全貌.同时 ...

  3. 【重识云原生】第二章计算第一节——计算虚拟化技术总述

    云平台计算领域知识地图: ​ 楔子:计算虚拟化技术算是云计算技术的擎天之柱,其前两代技术的演进一直引领着云计算的发展,即便到了云原生时代,其作用依然举足轻重. 一.计算虚拟化技术总述 1.1 虚拟化技 ...

  4. 【重识云原生】第六章容器基础6.4.7.1节——K8S Job组件

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  5. 【重识云原生】第六章容器基础6.4.5.2节——Deployment配置详细说明

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  6. 【重识云原生】第六章容器基础6.4.5.3节——Deployment实现原理解析

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  7. 【重识云原生】第六章容器基础6.4.5.1节——Deployment概述

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  8. 【重识云原生】第六章容器基础6.4.9.6节——Service 与 Pod 的DNS

    1 Service 与 Pod 的 DNS Kubernetes 为 Service 和 Pod 创建 DNS 记录. 你可以使用一致的 DNS 名称而非 IP 地址访问 Service. Kuber ...

  9. 【重识云原生】第六章容器6.3.5节——Controller Manager概述

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  10. 【重识云原生】第三章云存储3.5节——商用分布式云存储方案

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

最新文章

  1. 『Numpy』常用方法记录
  2. JavaScript中的call、apply、bind深入理解
  3. wireshrk中的名词说明
  4. Vim as Python IDE on windows
  5. 从阿里中台战略看企业IT架构转型之道(下)
  6. php mysql 拼音首字母,Mysql应用MySQL查询汉字的拼音首字母实例教程
  7. SpringBoot总结之CommandLineRunner
  8. liunx Swap 分区的作用
  9. Windows server 2016 安装小度WiFi网卡驱动
  10. AUTOCAD——合并图层
  11. 如何注册Gitlab/被墙如何注册
  12. Flutter 利用 FFI,绕过 Android JNI 直接调用 C++ 层!
  13. 蓝牙耳机哪款好?佩戴舒适的无线蓝牙耳机推荐
  14. 2020年度英国商业大奖获奖名单公布
  15. 寄快递没有那么贵,大件这样寄才便宜!!!
  16. 【驾驶技巧】 汽车驾驶经验交流——倒车技巧
  17. VBA Instr()函数 返回搜索到的字符位置 - VBA函数学习笔记(三)
  18. python有一门课不及格的学生_有一门课不及格的学生(c++)
  19. 网络请求框架:Okhttp:Call对象实现请求源码解析【四】
  20. Win10下应用程序默认管理员权限运行

热门文章

  1. FOJ1303——Calendar
  2. z5s+android+4.4,中兴NX403a(Nubia Z5S Mini Android 4.4)刷Recovery教程
  3. 怎样做一个软件注册程序
  4. Linux用户和组权限管理
  5. python求矩阵逆、伪逆、转置、矩阵乘法
  6. 蓝桥杯单片机(十二)PCF8591(D/A转换)
  7. ios隐私政策_新的iOS 14已经揭露了严重的隐私问题
  8. Learning through Auxiliary Tasks——辅助任务学习or自监督学习中的pretext
  9. 4399测试工程师笔试题
  10. opencv获取不规则图像