{"id":201634,"date":"2025-05-10T08:16:11","date_gmt":"2025-05-10T00:16:11","guid":{"rendered":"https:\/\/server.hk\/cnblog\/201634\/"},"modified":"2025-05-10T08:16:11","modified_gmt":"2025-05-10T00:16:11","slug":"k8s%e9%83%a8%e7%bd%b2redis%e9%9b%86%e7%be%a4%e5%ae%9e%e7%8e%b0%e8%bf%87%e7%a8%8b%e5%ae%9e%e4%be%8b%e8%af%a6%e8%a7%a3","status":"publish","type":"post","link":"https:\/\/server.hk\/cnblog\/201634\/","title":{"rendered":"k8s\u90e8\u7f72redis\u96c6\u7fa4\u5b9e\u73b0\u8fc7\u7a0b\u5b9e\u4f8b\u8be6\u89e3"},"content":{"rendered":"<p><b><\/b> <\/p>\n<h1>k8s\u90e8\u7f72redis\u96c6\u7fa4\u5b9e\u73b0\u8fc7\u7a0b\u5b9e\u4f8b\u8be6\u89e3<\/h1>\n<p><span style=\"cursor: pointer\"><i><\/i>\u6536\u85cf<\/span> <\/p>\n<p>\u5927\u5bb6\u597d\uff0c\u6211\u4eec\u53c8\u89c1\u9762\u4e86\u554a~\u672c\u6587<span style=\"color: #FF6600;font-family:\">\u300ak8s\u90e8\u7f72redis\u96c6\u7fa4\u5b9e\u73b0\u8fc7\u7a0b\u5b9e\u4f8b\u8be6\u89e3\u300b<\/span>\u7684\u5185\u5bb9\u4e2d\u5c06\u4f1a\u6d89\u53ca\u5230<span style=\"color: #FF6600;font-family:\">k8sredis\u3001\u96c6\u7fa4\u90e8\u7f72<\/span>\u7b49\u7b49\u3002\u5982\u679c\u4f60\u6b63\u5728\u5b66\u4e60<span style=\"color: #FF6600;font-family:\">\u6570\u636e\u5e93<\/span>\u76f8\u5173\u77e5\u8bc6\uff0c\u6b22\u8fce\u5173\u6ce8\u6211\uff0c\u4ee5\u540e\u4f1a\u7ed9\u5927\u5bb6\u5e26\u6765\u66f4\u591a<span style=\"color: #FF6600;font-family:\">\u6570\u636e\u5e93<\/span>\u76f8\u5173\u6587\u7ae0\uff0c\u5e0c\u671b\u6211\u4eec\u80fd\u4e00\u8d77\u8fdb\u6b65\uff01\u4e0b\u9762\u5c31\u5f00\u59cb\u672c\u6587\u7684\u6b63\u5f0f\u5185\u5bb9~<\/p>\n<h2>\u5199\u5728\u524d\u9762<\/h2>\n<p>\u4e00\u822c\u6765\u8bf4\uff0cREDIS\u90e8\u7f72\u6709\u4e09\u79cd\u6a21\u5f0f\u3002<\/p>\n<ul>\n<li>\u5355\u5b9e\u4f8b\u6a21\u5f0f\uff0c\u4e00\u822c\u7528\u4e8e\u6d4b\u8bd5\u73af\u5883\u3002<\/li>\n<li>\u54e8\u5175\u6a21\u5f0f<\/li>\n<li>\u96c6\u7fa4\u6a21\u5f0f<\/li>\n<\/ul>\n<p>\u540e\u4e24\u8005\u7528\u4e8e\u751f\u4ea7\u90e8\u7f72<\/p>\n<ul>\n<li>\u54e8\u5175\u6a21\u5f0f<\/li>\n<\/ul>\n<p>\u5728redis3.0\u4ee5\u524d\uff0c\u8981\u5b9e\u73b0\u96c6\u7fa4\u4e00\u822c\u662f\u501f\u52a9\u54e8\u5175sentinel\u5de5\u5177\u6765\u76d1\u63a7master\u8282\u70b9\u7684\u72b6\u6001\u3002<\/p>\n<p>\u5982\u679cmaster\u8282\u70b9\u5f02\u5e38\uff0c\u5219\u4f1a\u505a\u4e3b\u4ece\u5207\u6362\uff0c\u5c06\u67d0\u4e00\u53f0slave\u4f5c\u4e3amaster\u3002<\/p>\n<p>\u5f15\u5165\u4e86\u54e8\u5175\u8282\u70b9\uff0c\u90e8\u7f72\u66f4\u590d\u6742\uff0c\u7ef4\u62a4\u6210\u672c\u4e5f\u6bd4\u8f83\u9ad8\uff0c\u5e76\u4e14\u6027\u80fd\u548c\u9ad8\u53ef\u7528\u6027\u7b49\u5404\u65b9\u9762\u8868\u73b0\u4e00\u822c\u3002<\/p>\n<ul>\n<li>\u96c6\u7fa4\u6a21\u5f0f<\/li>\n<\/ul>\n<p>3.0 \u540e\u63a8\u51fa\u7684 Redis \u5206\u5e03\u5f0f\u96c6\u7fa4\u89e3\u51b3\u65b9\u6848<\/p>\n<p>\u4e3b\u8282\u70b9\u63d0\u4f9b\u8bfb\u5199\u64cd\u4f5c\uff0c\u4ece\u8282\u70b9\u4f5c\u4e3a\u5907\u7528\u8282\u70b9\uff0c\u4e0d\u63d0\u4f9b\u8bf7\u6c42\uff0c\u53ea\u4f5c\u4e3a\u6545\u969c\u8f6c\u79fb\u4f7f\u7528<\/p>\n<p>\u5982\u679cmaster\u8282\u70b9\u5f02\u5e38\uff0c\u4e5f\u662f\u4f1a\u81ea\u52a8\u505a\u4e3b\u4ece\u5207\u6362\uff0c\u5c06slave\u5207\u6362\u4e3amaster\u3002<\/p>\n<p>\u603b\u7684\u6765\u8bf4\uff0c\u96c6\u7fa4\u6a21\u5f0f\u660e\u663e\u4f18\u4e8e\u54e8\u5175\u6a21\u5f0f<\/p>\n<p>\u90a3\u4e48\u4eca\u5929\u6211\u4eec\u5c31\u6765\u8bb2\u89e3\u4e0b\uff1ak8s\u73af\u5883\u4e0b\uff0c\u5982\u4f55\u90e8\u7f72redis\u96c6\u7fa4\uff08\u4e09\u4e3b\u4e09\u4ece\uff09\uff1f<\/p>\n<h2>\u524d\u7f6e\u51c6\u5907<\/h2>\n<h3>\u4e00\u3001nfs\u5b89\u88c5<\/h3>\n<ul>\n<li>nfs<\/li>\n<\/ul>\n<pre># \u670d\u52a1\u7aef\n# 1.\u5b89\u88c5\nyum -y install nfs-utils # nfs\u6587\u4ef6\u7cfb\u7edf\nyum -y install rpcbind   # rpc\u534f\u8bae\n# 2.\u914d\u7f6e\uff08\u9700\u8981\u5171\u4eab\u7684\u6587\u4ef6\u5939\uff09\nvi \/etc\/exports\n\/opt\/nfs\/pv1 *(rw,sync,no_subtree_check,no_root_squash)\n\/opt\/nfs\/pv2 *(rw,sync,no_subtree_check,no_root_squash)\n\/opt\/nfs\/pv3 *(rw,sync,no_subtree_check,no_root_squash)\n\/opt\/nfs\/pv4 *(rw,sync,no_subtree_check,no_root_squash)\n\/opt\/nfs\/pv5 *(rw,sync,no_subtree_check,no_root_squash)\n\/opt\/nfs\/pv6 *(rw,sync,no_subtree_check,no_root_squash)\n# 3.\u521b\u5efa\u6587\u4ef6\u5939\nmkdir -p \/opt\/nfs\/pv{1..6}\n# 4.\u66f4\u65b0\u914d\u7f6e\u5e76\u91cd\u542fnfs\u670d\u52a1\nexportfs -r  #\u66f4\u65b0\u914d\u7f6e\nsystemctl restart rpcbind\nsystemctl restart nfs\nsystemctl enable nfs  #\u5f00\u673a\u542f\u52a8\nsystemctl enable rpcbind\n# 5.\u9a8c\u8bc1\nshowmount -e 192.168.4.xx #\u670d\u52a1\u7aef\u9a8c\u8bc1NFS\u5171\u4eab\n\t&gt; Export list for 192.168.4.xx:\n\t\/opt\/nfs\/pv6 *\n        \/opt\/nfs\/pv5 *\n        \/opt\/nfs\/pv4 *\n        \/opt\/nfs\/pv3 *\n        \/opt\/nfs\/pv2 *\n        \/opt\/nfs\/pv1 *\nrpcinfo -p #\u67e5\u770b\u7aef\u53e3\n# \u5ba2\u6237\u7aef\nyum -y install nfs-utils\nsystemctl restart nfs\nsystemctl enable nfs  #\u5f00\u673a\u542f\u52a8\n<\/pre>\n<p>\u8fd9\u91cc\u8bf4\u4e00\u4e0b\uff0c\u4e3a\u4ec0\u4e48\u8981\u5b89\u88c5nfs\uff1f<\/p>\n<p>\u662f\u4e3a\u4e86\u4e0b\u9762\u521b\u5efaSC\uff0cPV\u505a\u51c6\u5907\uff0cPV\u9700\u8981\u4f7f\u7528nfs\u670d\u52a1\u5668\u3002<\/p>\n<h3>\u4e8c\u3001SC\u3001PV \u521b\u5efa<\/h3>\n<h4>2.1\u521b\u5efaSC<\/h4>\n<p>StorageClass\uff1a\u7b80\u79f0sc\uff0c\u5b58\u50a8\u7c7b\uff0c\u662fk8s\u5e73\u53f0\u4e3a\u5b58\u50a8\u63d0\u4f9b\u5546\u63d0\u4f9b\u5b58\u50a8\u63a5\u5165\u7684\u4e00\u79cd\u58f0\u660e\u3002\u901a\u8fc7sc\u548c\u76f8\u5e94\u7684\u5b58\u50a8\u63d2\u4ef6(csi)\u4e3a\u5bb9\u5668\u5e94\u7528\u63d0\u4f9b\u6301\u4e45\u5b58\u50a8\u5377\u7684\u80fd\u529b\u3002<\/p>\n<p>vi redis-sc.yaml<\/p>\n<pre>apiVersion: storage.k8s.io\/v1\nkind: StorageClass\nmetadata:\n  name: redis-sc\nprovisioner: nfs-storage\n<\/pre>\n<p>\u540d\u79f0\u4e3a<code>redis-sc<\/code><\/p>\n<p>\u6267\u884c\u521b\u5efasc\uff1a<\/p>\n<pre>kubectl apply -f redis-sc.yaml\n&gt; storageclass.storage.k8s.io\/redis-sc created\n<\/pre>\n<p>\u901a\u8fc7kuboard\u67e5\u770b\uff1a<\/p>\n<p style=\"text-align:center\"><img decoding=\"async\" src=\"https:\/\/www.17golang.com\/uploads\/20230225\/167729227063f972eef0eb8.jpg\" class=\"aligncenter\"><\/p>\n<h4>2.2\u521b\u5efaPV<\/h4>\n<p>PersistentVolume\u7b80\u79f0pv\uff0c\u6301\u4e45\u5316\u5b58\u50a8\uff0c\u662fk8s\u4e3a\u4e91\u539f\u751f\u5e94\u7528\u63d0\u4f9b\u4e00\u79cd\u62e5\u6709\u72ec\u7acb\u751f\u547d\u5468\u671f\u7684\u3001\u7528\u6237\u53ef\u7ba1\u7406\u7684\u5b58\u50a8\u7684\u62bd\u8c61\u8bbe\u8ba1\u3002<\/p>\n<p>vi redis-pv.yaml<\/p>\n<pre>apiVersion: v1\nkind: PersistentVolume\nmetadata:\n  name: nfs-pv1\nspec:\n  storageClassName: redis-sc\n  capacity:\n    storage: 200M\n  accessModes:\n    - ReadWriteMany\n  nfs:\n    server: 192.168.4.xx\n    path: \"\/opt\/nfs\/pv1\"\n<\/pre>\n<p>\u540d\u79f0\u4e3a<code>nfs-pv1<\/code>\uff0c\u5bf9\u5e94\u7684storageClassName\u4e3a<code>redis-sc<\/code>\uff0ccapacity\u5bb9\u5668200M\uff0caccessModes\u8bbf\u95ee\u6a21\u5f0f\u53ef\u88ab\u591a\u8282\u70b9\u8bfb\u5199<\/p>\n<p>\u5bf9\u5e94nfs\u670d\u52a1\u5668<code>192.168.4.xx<\/code>\uff0c\u5bf9\u5e94\u6587\u4ef6\u5939\u8def\u5f84<code>\/opt\/nfs\/pv1<\/code>\uff08\u5bf9\u5e94\u4e0a\u9762\u5b89\u88c5nfs\u670d\u52a1\u5668\uff09<\/p>\n<p>\u4ee5\u6b64\u7c7b\u63a8\uff0c\u6211\u4eec\u521b\u5efa6\u4e2apv&#8230;&#8230;<\/p>\n<p>\u6267\u884c\u521b\u5efasc\uff1a<\/p>\n<pre>kubectl apply -f redis-pv.yaml\n&gt; persistentvolume\/nfs-pv1 created\n  persistentvolume\/nfs-pv2 created\n  persistentvolume\/nfs-pv3 created\n  persistentvolume\/nfs-pv4 created\n  persistentvolume\/nfs-pv5 created\n  persistentvolume\/nfs-pv6 created\n<\/pre>\n<p>\u901a\u8fc7kuboard\u67e5\u770b\uff1a<\/p>\n<p style=\"text-align:center\"><img decoding=\"async\" src=\"https:\/\/www.17golang.com\/uploads\/20230225\/167729227163f972ef65196.jpg\" class=\"aligncenter\"><\/p>\n<p>\u901a\u8fc7kubectl\u67e5\u770b\uff1a<code>kubectl get sc<\/code>\u3001<code>kubectl get pv<\/code><\/p>\n<p style=\"text-align:center\"><img decoding=\"async\" src=\"https:\/\/www.17golang.com\/uploads\/20230225\/167729227163f972efd8285.jpg\" class=\"aligncenter\"><\/p>\n<p>\u8fd9\u91cc\u8bf4\u4e00\u4e0b\uff0c\u4e3a\u4ec0\u4e48\u8981\u521b\u5efaSC\uff0cPV\uff1f<\/p>\n<p>\u56e0\u4e3aredis\u96c6\u7fa4\uff0c\u6700\u7ec8\u9700\u8981\u5bf9\u5e94\u7684\u6587\u4ef6\u6709\uff0c<code>redis.conf<\/code>\u3001<code>nodes.conf<\/code>\u3001<code>data<\/code><\/p>\n<p>\u7531\u6b64\u53ef\u89c1\uff0c\u8fd9\u4e9b\u6587\u4ef6\u6bcf\u4e2a\u8282\u70b9\uff0c\u90fd\u5f97\u5bf9\u5e94\u6709\u81ea\u5df1\u5f97\u6587\u4ef6\u5939\u3002<\/p>\n<p>\u5f53\u7136<code>redis.conf<\/code>\u53ef\u4ee5\u662f\u4e00\u4e2a\u76f8\u540c\u5f97\uff0c\u5176\u4ed6\u4e24\u4e2a\uff0c\u5c31\u80af\u5b9a\u662f\u4e0d\u4e00\u6837\u5f97\u3002<\/p>\n<p>\u5982\u679c\u4f7f\u7528\u6302\u8f7d\u6587\u4ef6\u5939\u5373\u662f <code>Volume<\/code> \u7684\u60c5\u51b5\u90e8\u7f72\u4e00\u4e2apod\uff0c\u5f88\u660e\u663e\uff0c\u662f\u4e0d\u80fd\u6ee1\u8db3\u7684\u3002<\/p>\n<p>\u5f53\u7136\uff0c\u4f60\u90e8\u7f72\u591a\u4e2a\u4e0d\u4e00\u6837\u7684pod\uff0c\u4e5f\u662f\u53ef\u4ee5\u505a\u5230\uff0c\u4f46\u662f\u5c31\u5f97\u51996\u4e2a\u90e8\u7f72yaml\u6587\u4ef6\uff0c\u540e\u671f\u7ef4\u62a4\u4e5f\u5f88\u590d\u6742\u3002<\/p>\n<p>\u6700\u597d\u7684\u6548\u679c\u662f\uff0c\u5199\u4e00\u4e2a\u90e8\u7f72yaml\u6587\u4ef6\uff0c\u7136\u540e\u67096\u4e2areplicas\u526f\u672c\uff0c\u5c31\u5bf9\u5e94\u4e86\u6211\u4eecredis\u96c6\u7fa4\uff08\u4e09\u4e3b\u4e09\u4ece\uff09\u3002<\/p>\n<p>\u90a3\u4e00\u4e2apod\uff0c\u518d\u4f7f\u7528<code>Volume<\/code>\u6302\u8f7d\u6587\u4ef6\u5939\uff0c\u8fd9\u4e2a\u53ea\u80fd\u662f\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u662f\u65e0\u6cd5\u505a\u52306\u4e2apod\u5bf9\u5e94\u4e0d\u540c\u7684\u6587\u4ef6\u5939\u3002<\/p>\n<p>\u6240\u4ee5\u8fd9\u91cc\uff0c\u5c31\u5f15\u51fa\u4e86<code>SC<\/code>\u3001<code>PV<\/code>\u4e86\u3002<\/p>\n<p>\u4f7f\u7528<code>SC<\/code>\u3001<code>PV<\/code>\u5c31\u53ef\u4ee5\u5b9e\u73b0\uff0c\u8fd96\u4e2apod\u542f\u52a8\uff0c\u5c31\u5bf9\u5e94\u4e0a\u6211\u4eec\u521b\u5efa\u76846\u4e2a<code>PV<\/code>\uff0c\u90a3\u5c31\u5b9e\u73b0\u4e86<code>redis.conf<\/code>\u3001<code>nodes.conf<\/code>\u3001<code>data<\/code>\uff0c\u8fd9\u4e09\u4e2a\u6587\u4ef6\uff0c\u5b58\u653e\u7684\u8def\u5f84\uff0c\u5c31\u662f\u4e0d\u4e00\u6837\u7684\u8def\u5f84\u4e86\u3002<\/p>\n<p>\u54c8\u54c8\uff0c\u8bf4\u4e86\uff0c\u90a3\u4e48\u591a\uff0c\u4e0d\u77e5\u9053\uff0c\u5927\u5bb6\u660e\u4e0d\u660e\u767d\uff0c\u4e0d\u660e\u767d\u7684\u53ef\u4ee5\u7ee7\u7eed\u5f80\u4e0b\u770b\uff0c\u6216\u8005\u81ea\u5df1\u90e8\u7f72\u5b9e\u64cd\u4e00\u4e0b\uff0c\u4f30\u8ba1\u4f60\u5c31\u80fd\u660e\u767d\uff0c\u4e3a\u5565\u8981\u8fd9\u4e48\u5e72\u4e86\uff1f<\/p>\n<h3>\u4e09\u3001redis\u96c6\u7fa4\u642d\u5efa<\/h3>\n<p>RC\u3001Deployment\u3001DaemonSet\u90fd\u662f\u9762\u5411\u65e0\u72b6\u6001\u7684\u670d\u52a1\uff0c\u5b83\u4eec\u6240\u7ba1\u7406\u7684Pod\u7684IP\u3001\u540d\u5b57\uff0c\u542f\u505c\u987a\u5e8f\u7b49\u90fd\u662f\u968f\u673a\u7684\uff0c\u800cStatefulSet\u662f\u4ec0\u4e48\uff1f\u987e\u540d\u601d\u4e49\uff0c\u6709\u72b6\u6001\u7684\u96c6\u5408\uff0c\u7ba1\u7406\u6240\u6709\u6709\u72b6\u6001\u7684\u670d\u52a1\uff0c\u6bd4\u5982MySQL\u3001MongoDB\u96c6\u7fa4\u7b49\u3002<\/p>\n<p>StatefulSet\u672c\u8d28\u4e0a\u662fDeployment\u7684\u4e00\u79cd\u53d8\u4f53\uff0c\u5728v1.9\u7248\u672c\u4e2d\u5df2\u6210\u4e3aGA\u7248\u672c\uff0c\u5b83\u4e3a\u4e86\u89e3\u51b3\u6709\u72b6\u6001\u670d\u52a1\u7684\u95ee\u9898\uff0c\u5b83\u6240\u7ba1\u7406\u7684Pod\u62e5\u6709<code>\u56fa\u5b9a\u7684Pod\u540d\u79f0<\/code>\uff0c<code>\u542f\u505c\u987a\u5e8f<\/code>\uff0c\u5728StatefulSet\u4e2d\uff0cPod\u540d\u5b57\u79f0\u4e3a<code>\u7f51\u7edc\u6807\u8bc6<\/code>(hostname)\uff0c\u8fd8\u5fc5\u987b\u8981\u7528\u5230\u5171\u4eab\u5b58\u50a8\u3002<\/p>\n<p>\u5728Deployment\u4e2d\uff0c\u4e0e\u4e4b\u5bf9\u5e94\u7684\u670d\u52a1\u662fservice\uff0c\u800c\u5728StatefulSet\u4e2d\u4e0e\u4e4b\u5bf9\u5e94\u7684headless service\uff0cheadless service\uff0c\u5373\u65e0\u5934\u670d\u52a1\uff0c\u4e0eservice\u7684\u533a\u522b\u5c31\u662f\u5b83\u6ca1\u6709Cluster IP\uff0c\u89e3\u6790\u5b83\u7684\u540d\u79f0\u65f6\u5c06\u8fd4\u56de\u8be5Headless Service\u5bf9\u5e94\u7684\u5168\u90e8Pod\u7684Endpoint\u5217\u8868\u3002<\/p>\n<p>\u9664\u6b64\u4e4b\u5916\uff0cStatefulSet\u5728Headless Service\u7684\u57fa\u7840\u4e0a\u53c8\u4e3aStatefulSet\u63a7\u5236\u7684\u6bcf\u4e2aPod\u526f\u672c\u521b\u5efa\u4e86\u4e00\u4e2aDNS\u57df\u540d\uff0c\u8fd9\u4e2a\u57df\u540d\u7684\u683c\u5f0f\u4e3a\uff1a<\/p>\n<pre>$(pod.name).$(headless server.name).${namespace}.svc.cluster.local\n<\/pre>\n<p>\u4e5f\u5373\u662f\u8bf4\uff0c\u5bf9\u4e8e\u6709\u72b6\u6001\u670d\u52a1\uff0c\u6211\u4eec\u6700\u597d\u4f7f\u7528\u56fa\u5b9a\u7684\u7f51\u7edc\u6807\u8bc6\uff08\u5982\u57df\u540d\u4fe1\u606f\uff09\u6765\u6807\u8bb0\u8282\u70b9\uff0c\u5f53\u7136\u8fd9\u4e5f\u9700\u8981\u5e94\u7528\u7a0b\u5e8f\u7684\u652f\u6301\uff08\u5982Zookeeper\u5c31\u652f\u6301\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u5199\u5165\u4e3b\u673a\u57df\u540d\uff09\u3002<\/p>\n<p>StatefulSet\u57fa\u4e8eHeadless Service\uff08\u5373\u6ca1\u6709Cluster IP\u7684Service\uff09\u4e3aPod\u5b9e\u73b0\u4e86\u7a33\u5b9a\u7684\u7f51\u7edc\u6807\u5fd7\uff08\u5305\u62ecPod\u7684hostname\u548cDNS Records\uff09\uff0c\u5728Pod\u91cd\u65b0\u8c03\u5ea6\u540e\u4e5f\u4fdd\u6301\u4e0d\u53d8\u3002\u540c\u65f6\uff0c\u7ed3\u5408PV\/PVC\uff0cStatefulSet\u53ef\u4ee5\u5b9e\u73b0\u7a33\u5b9a\u7684\u6301\u4e45\u5316\u5b58\u50a8\uff0c\u5c31\u7b97Pod\u91cd\u65b0\u8c03\u5ea6\u540e\uff0c\u8fd8\u662f\u80fd\u8bbf\u95ee\u5230\u539f\u5148\u7684\u6301\u4e45\u5316\u6570\u636e\u3002<\/p>\n<p>\u4ee5\u4e0b\u4e3a\u4f7f\u7528StatefulSet\u90e8\u7f72Redis\u7684\u67b6\u6784\uff0c\u65e0\u8bba\u662fMaster\u8fd8\u662fSlave\uff0c\u90fd\u4f5c\u4e3aStatefulSet\u7684\u4e00\u4e2a\u526f\u672c\uff0c\u5e76\u4e14\u6570\u636e\u901a\u8fc7PV\u8fdb\u884c\u6301\u4e45\u5316\uff0c\u5bf9\u5916\u66b4\u9732\u4e3a\u4e00\u4e2aService\uff0c\u63a5\u53d7\u5ba2\u6237\u7aef\u8bf7\u6c42\u3002<\/p>\n<h4>3.1\u521b\u5efaheadless\u670d\u52a1<\/h4>\n<p>Headless service\u662fStatefulSet\u5b9e\u73b0\u7a33\u5b9a\u7f51\u7edc\u6807\u8bc6\u7684\u57fa\u7840\u3002<\/p>\n<p>vi redis-hs.yaml<\/p>\n<pre>---\napiVersion: v1\nkind: Service\nmetadata:\n  labels:\n    k8s.kuboard.cn\/layer: db\n    k8s.kuboard.cn\/name: redis\n  name: redis-hs\n  namespace: jxbp\nspec:\n  ports:\n    - name: nnbary\n      port: 6379\n      protocol: TCP\n      targetPort: 6379\n  selector:\n    k8s.kuboard.cn\/layer: db\n    k8s.kuboard.cn\/name: redis\n  clusterIP: None\n<\/pre>\n<p>\u547d\u540d\u7a7a\u95f4\u4e3a\uff1a<code>jxbp<\/code>\uff0c\u540d\u79f0\u4e3a\uff1a<code>redis-hs<\/code><\/p>\n<p>\u6267\u884c\uff1a<\/p>\n<pre>kubectl apply -f redis-hs.yaml\n&gt; service\/redis-hs created\n<\/pre>\n<p>\u7f51\u7edc\u8bbf\u95ee\uff1apod\u540d\u79f0.headless\u540d\u79f0.namespace\u540d\u79f0.svc.cluster.local<\/p>\n<p>\u5373\uff1apod\u540d\u79f0.redis-hs.jxbp.svc.cluster.local<\/p>\n<h4>3.2\u521b\u5efaredis\u5bf9\u5e94pod\u96c6\u7fa4<\/h4>\n<p>\u521b\u5efa\u597dHeadless service\u540e\uff0c\u5c31\u53ef\u4ee5\u5229\u7528StatefulSet\u521b\u5efaRedis \u96c6\u7fa4\u8282\u70b9\uff0c\u8fd9\u4e5f\u662f\u672c\u6587\u7684\u6838\u5fc3\u5185\u5bb9\u3002<\/p>\n<p>vi redis.yaml<\/p>\n<pre>apiVersion: apps\/v1\nkind: StatefulSet\nmetadata:\n  name: redis\n  namespace: jxbp\n  labels:\n    k8s.kuboard.cn\/layer: db\n    k8s.kuboard.cn\/name: redis\nspec:\n  replicas: 6\n  selector:\n    matchLabels:\n      k8s.kuboard.cn\/layer: db\n      k8s.kuboard.cn\/name: redis\n  serviceName: redis\n  template:\n    metadata:\n      labels:\n        k8s.kuboard.cn\/layer: db\n        k8s.kuboard.cn\/name: redis\n    spec:\n      terminationGracePeriodSeconds: 20\n      containers:\n        - name: redis\n          image: 192.168.4.xx\/jxbp\/redis:6.2.6\n          ports:\n            - name: redis\n              containerPort: 6379\n              protocol: \"TCP\"\n            - name: cluster\n              containerPort: 16379\n              protocol: \"TCP\"\n          volumeMounts:\n            - name: \"redis-conf\"\n              mountPath: \"\/etc\/redis\/redis.conf\"\n            - name: \"redis-data\"\n              mountPath: \"\/data\"\n      volumes:\n        - name: \"redis-conf\"\n          hostPath:\n            path: \"\/opt\/redis\/conf\/redis.conf\"\n            type: FileOrCreate\n  volumeClaimTemplates:\n    - metadata:\n        name: redis-data\n      spec:\n        accessModes: [ \"ReadWriteMany\" ]\n        resources:\n          requests:\n            storage: 200M\n        storageClassName: redis-sc\n<\/pre>\n<p>\u540d\u79f0\u4e3a\uff1a<code>redis<\/code>\uff0c\u5bf9\u5e94\u7684\u955c\u50cf\u4e3a\uff1a<code>redis:6.2.6<\/code>\uff0c<\/p>\n<p>\u6302\u8f7d\u7684\u6587\u4ef6\uff1a\u5bbf\u4e3b\u673a\u7684<code>\/opt\/redis\/conf\/redis.conf<\/code>\u5230redis\u5bb9\u5668\u7684<code>\/etc\/redis\/redis.conf<\/code>\uff08redis.conf\u914d\u7f6e\u6587\u4ef6\u5982\u4e0b\u6240\u793a\uff09<\/p>\n<p>PVC\u5b58\u50a8\u5377\u58f0\u660e\u6a21\u677f<code>volumeClaimTemplates<\/code>\uff0c\u6307\u5b9a\u4e86\u540d\u79f0\u4e3a<code>redis-sc<\/code>\u7684SC\uff08storageClassName\uff09<\/p>\n<p>\u7531\u4e8e\u4e4b\u524dSC\u7ed1\u5b9a\u4e86PV\uff0c\u6240\u4ee5\u8fd9\u91cc\u7684PVC\u548cPV\uff0c\u5c31\u80fd\u4e00 \u4e00\u5bf9\u5e94\u7ed1\u5b9a\u4e0a\u4e86\u3002<\/p>\n<p>PV\u548cPVC\u7684\u5173\u7cfb\uff0c\u662f\u4e00 \u4e00\u7ed1\u5b9a\u7684\u3002\u5982\u679c\u8fd9\u91cc\u4e0d\u6307\u5b9aSC\uff0c\u90a3\u5c31\u4f1a\u5bfc\u81f4\uff0cPVC\u7ed1\u5b9aPV\uff0c\u662f\u4e00\u4e2a\u6df7\u4e71\u7684\u8fc7\u7a0b\uff0c\u968f\u673a\u7ed1\u5b9aPV\u4e86\u3002<\/p>\n<ul>\n<li>redis.conf<\/li>\n<\/ul>\n<pre># \u4e00\u822c\u914d\u7f6e\nbind 0.0.0.0\nport 6379\ndaemonize no\nrequirepass jxbd\n# \u96c6\u7fa4\u914d\u7f6e\ncluster-enabled yes\ncluster-config-file nodes.conf\ncluster-node-timeout 5000\n<\/pre>\n<p>\u6267\u884c\uff1a<\/p>\n<pre>kubectl apply -f redis.yaml\n<\/pre>\n<p>\u7531\u4e0a\u64cd\u4f5c\uff0c\u6211\u4eec\u5df2\u7ecf\u521b\u5efa\u597dredis\u76846\u4e2a\u526f\u672c\u4e86\u3002<\/p>\n<p>\u56e0\u4e3ak8s\u90e8\u7f72redis\u96c6\u7fa4\u7684\u7bc7\u5e45\uff0c\u6709\u70b9\u957f<\/p>\n","protected":false},"excerpt":{"rendered":"<p>k8s\u90e8\u7f72redis\u96c6\u7fa4\u5b9e\u73b0\u8fc7\u7a0b&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[101],"tags":[],"class_list":["post-201634","post","type-post","status-publish","format-standard","hentry","category-database"],"_links":{"self":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts\/201634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/comments?post=201634"}],"version-history":[{"count":0,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts\/201634\/revisions"}],"wp:attachment":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/media?parent=201634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/categories?post=201634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/tags?post=201634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}