{"id":1290,"date":"2022-04-08T12:58:22","date_gmt":"2022-04-08T04:58:22","guid":{"rendered":"https:\/\/www.buyao007.icu\/?p=1290"},"modified":"2022-04-25T10:38:11","modified_gmt":"2022-04-25T02:38:11","slug":"4-k8s%e7%9a%84%e5%bc%b9%e6%80%a7%e4%bc%b8%e7%bc%a9","status":"publish","type":"post","link":"https:\/\/www.buyao007.icu\/?p=1290","title":{"rendered":"4.k8s\u7684\u5f39\u6027\u4f38\u7f29"},"content":{"rendered":"\n<p>\u5b59\u5bcc\u9633\uff0c \u6c5f\u6e56\u4eba\u79f0\u6ca1\u4eba\u79f0\u3002\u591a\u5e74\u4e92\u8054\u7f51\u8fd0\u7ef4\u5de5\u4f5c\u7ecf\u9a8c\uff0c\u66fe\u8d1f\u8d23\u8fc7\u5b59\u5e03\u65af\u5927\u89c4\u6a21\u96c6\u7fa4\u67b6\u6784\u81ea\u52a8\u5316\u8fd0\u7ef4\u7ba1\u7406\u5de5\u4f5c\u3002\u64c5\u957fWeb\u96c6\u7fa4\u67b6\u6784\u4e0e\u81ea\u52a8\u5316\u8fd0\u7ef4\uff0c\u66fe\u8d1f\u8d23\u56fd\u5185\u67d0\u5927\u578b\u535a\u5ba2\u7f51\u7ad9\u8fd0\u7ef4\u5de5\u4f5c\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc_0\">1.\u5f39\u6027\u4f38\u7f29\u6982\u8ff0<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>k8s\u5f39\u6027\u4f38\u7f29,\u9700\u8981\u9644\u52a0\u63d2\u4ef6heapster\u76d1\u63a7\uff0c\u5f53\u8fbe\u5230\u9608\u503c\u540e\u81ea\u52a8\u589e\u52a0\u6216\u8005\u51cf\u5c11pod\u6570\u91cf\u4f46\u662fheapster\u5728Kubernetes1.10.1\u5df2\u7ecf\u5f03\u7528\uff0c\u540e\u9762\u7684\u6587\u7ae0\u4f1a\u5199\u5b98\u65b9\u652f\u6301\u7684metrics-server\u76d1\u63a7\u505a\u5f39\u6027\u4f38\u7f29<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc_0\">2.\u90e8\u7f72heapster\u76d1\u63a7<\/h2>\n\n\n\n<p><strong><em>1.heapster\u6982\u8ff0<\/em><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Heapster\u662f\u5bb9\u5668\u96c6\u7fa4\u76d1\u63a7\u548c\u6027\u80fd\u5206\u6790\u5de5\u5177\uff0cHPA\u3001Dashborad\u3001Kubectl top\u90fd\u4f9d\u8d56\u4e8eheapster\u6536\u96c6\u7684\u6570\u636e\u3002\nk8s\u65e9\u671f\u7248\u672c\u9700\u8981\u9644\u52a0\u63d2\u4ef6heapster\u76d1\u63a7\uff0c\u4f46\u662fHeapster\u4ecekubernetes 1.8\u4ee5\u540e\u5df2\u7ecf\u88ab\u9057\u5f03\u4e86\uff0c\u88abmetrics-server\u6240\u66ff\u4ee3\uff0c\u540e\u671f\u76d1\u63a7\u529f\u80fd\u9010\u6e10\u88abPrometheus\u66ff\u4ee3\nkubelet\u662f\u96c6\u6210\u4e86cAdvisor\u7ec4\u4ef6\u7684\u4e14\u76d1\u542c\u4e864194\u7aef\u53e3\u3002\n\nheapster\u63d2\u4ef6\u7528\u5230\u7528\u5230\u4ee5\u4e0b\u51e0\u4e2a\u7ec4\u4ef6:\nheapster:\u91c7\u96c6\u76d1\u63a7\u6570\u636e\u3002\u5176\u9700\u8981\u548cApi-Server\u8fdb\u884c\u901a\u4fe1\uff0c\u4ece\u800c\u83b7\u53d6Node\u8282\u70b9\u4fe1\u606f\u3002\u800c\u540e\u57fa\u4e8eNode\u8282\u70b9\u7684kubelet\u7ec4\u4ef6\u5185\u7f6e\u7684cAdvisor\u83b7\u53d6\u76d1\u63a7\u6570\u636e\u3002\ninfluxdb:\u8d1f\u8d23\u6570\u636e\u5b58\u50a8\u3002\ngrafana:\u8d1f\u8d23\u6570\u636e\u5c55\u793a\nheapster\u7ec4\u4ef6\u7684\u5de5\u4f5c\u539f\u7406\u5982\u4e0b\u56fe\u6240\u793a\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"515\" src=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-48.png\" alt=\"\" class=\"wp-image-1293\" srcset=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-48.png 865w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-48-300x179.png 300w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-48-768x457.png 768w\" sizes=\"(max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<p><strong><em>2.\u5b89\u88c5heapster\u76d1\u63a7<\/em><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>###\u4e0a\u4f20\u955c\u50cf<\/strong>\nls *.tar.gz\nfor n in `ls *.tar.gz`;do docker load -i $n ;done\ndocker tag docker.io\/kubernetes\/heapster_grafana:v2.6.0 10.0.0.11:5000\/heapster_grafana:v2.6.0\ndocker tag  docker.io\/kubernetes\/heapster_influxdb:v0.5 10.0.0.11:5000\/heapster_influxdb:v0.5\ndocker tag docker.io\/kubernetes\/heapster:canary 10.0.0.11:5000\/heapster:canary\n<strong>###\u7f16\u5199\u8d44\u6e90\u6e05\u5355<\/strong>\n&#91;root@k8s-master k8s_yaml]# mkdir heapster\n&#91;root@k8s-master k8s_yaml]# cd heapster\/\n&#91;root@k8s-master heapster]# cat 01-heapster-controller.yaml \napiVersion: extensions\/v1beta1\nkind: Deployment\nmetadata:\n  labels:\n    k8s-app: heapster\n    name: heapster\n    version: v6\n  name: heapster\n  namespace: kube-system\nspec:\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        k8s-app: heapster\n        version: v6\n    spec:\n      nodeName: k8s-node-2\n      containers:\n      - name: heapster\n        image: k8s-master:5000\/heapster:canary\n        imagePullPolicy: IfNotPresent\n        command:\n        - \/heapster\n        - --source=kubernetes:http:\/\/10.0.0.11:8080?inClusterConfig=false\n        - --sink=influxdb:http:\/\/monitoring-influxdb:8086\n&#91;root@k8s-master heapster]# cat 02-heapster-service.yaml \napiVersion: v1\nkind: Service\nmetadata:\n  labels:\n    kubernetes.io\/cluster-service: 'true'\n    kubernetes.io\/name: Heapster\n  name: heapster\n  namespace: kube-system\nspec:\n  ports:\n  - port: 80\n    targetPort: 8082\n  selector:\n    k8s-app: heapster\n&#91;root@k8s-master heapster]# cat 03-influxdb-grafana-controller.yaml \napiVersion: extensions\/v1beta1\nkind: Deployment\nmetadata:\n  labels:\n    name: influxGrafana\n  name: influxdb-grafana\n  namespace: kube-system\nspec:\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        name: influxGrafana\n    spec:\n      nodeName: k8s-node-2\n      containers:\n      - name: influxdb\n        image: k8s-master:5000\/heapster_influxdb:v0.5\n        volumeMounts:\n        - mountPath: \/data\n          name: influxdb-storage\n      - name: grafana\n        image: k8s-master:5000\/heapster_grafana:v2.6.0\n        env:\n          - name: INFLUXDB_SERVICE_URL\n            value: http:\/\/monitoring-influxdb:8086\n            # The following env variables are required to make Grafana accessible via\n            # the kubernetes api-server proxy. On production clusters, we recommend\n            # removing these env variables, setup auth for grafana, and expose the grafana\n            # service using a LoadBalancer or a public IP.\n          - name: GF_AUTH_BASIC_ENABLED\n            value: \"false\"\n          - name: GF_AUTH_ANONYMOUS_ENABLED\n            value: \"true\"\n          - name: GF_AUTH_ANONYMOUS_ORG_ROLE\n            value: Admin\n          - name: GF_SERVER_ROOT_URL\n            value: \/api\/v1\/proxy\/namespaces\/kube-system\/services\/monitoring-grafana\/\n        volumeMounts:\n        - mountPath: \/var\n          name: grafana-storage\n      volumes:\n      - name: influxdb-storage\n        emptyDir: {}\n      - name: grafana-storage\n        emptyDir: {}\n&#91;root@k8s-master heapster]# cat 04-grafana-service.yaml \napiVersion: v1\nkind: Service\nmetadata:\n  labels:\n    kubernetes.io\/cluster-service: 'true'\n    kubernetes.io\/name: monitoring-grafana\n  name: monitoring-grafana\n  namespace: kube-system\nspec:\n  # In a production setup, we recommend accessing Grafana through an external Loadbalancer\n  # or through a public IP. \n  # type: LoadBalancer\n  ports:\n  - port: 80\n    targetPort: 3000\n  selector:\n    name: influxGrafana\n&#91;root@k8s-master heapster]# cat 05-influxdb-service.yaml \napiVersion: v1\nkind: Service\nmetadata:\n  labels: null\n  name: monitoring-influxdb\n  namespace: kube-system\nspec:\n  ports:\n  - name: http\n    port: 8083\n    targetPort: 8083\n  - name: api\n    port: 8086\n    targetPort: 8086\n  selector:\n    name: influxGrafana\n<\/code><\/pre>\n\n\n\n<p><strong><em>3.\u5e94\u7528\u8d44\u6e90\u6e05\u5355\u5e76\u9a8c\u8bc1\u90e8\u7f72\u7ed3\u679c<\/em><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@k8s-master heapster]# kubectl apply -f .\n\u6e29\u99a8\u63d0\u793a:\nimagePullPolicy\u7684\u503c\u67093\u4e2a\uff0c\u5206\u522b\u4e3a\"Always, Never, IfNotPresent\"\u3002\nAlways:\u65e0\u8bba\u672c\u5730\u662f\u5426\u6709\u955c\u50cf\uff0c\u603b\u662f\u53bb\u4ed3\u5e93\u4e0b\u8f7d\u955c\u50cf\u3002\nNever:\u65e0\u8bba\u672c\u5730\u662f\u5426\u6709\u955c\u50cf\uff0c\u59cb\u7ec8\u4e0d\u53bb\u4ed3\u5e93\u66f4\u65b0\u3002\nIfNotPresent:\u5982\u679c\u672c\u5730\u6ca1\u6709\u955c\u50cf\uff0c\u5219\u4f1a\u53bb\u955c\u50cf\u4ed3\u5e93\u4e0b\u8f7d\u76f8\u5e94\u7684\u955c\u50cf\u540d\u79f0\n\u767b\u5f55dashboard\u9a8c\u8bc1\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u5f88\u660e\u663e\u5df2\u7ecf\u88ab\u76d1\u63a7\u4e86\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"441\" src=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-49.png\" alt=\"\" class=\"wp-image-1294\" srcset=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-49.png 865w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-49-300x153.png 300w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-49-768x392.png 768w\" sizes=\"(max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"toc_0\">3.\u9a8c\u8bc1\u5f39\u6027\u4f38\u7f29<\/h2>\n\n\n\n<p><strong><em>1.\u521b\u5efadeployment\u6587\u4ef6<\/em><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@k8s-master hpa]# cat deploy-wordpress2.yaml \napiVersion: extensions\/v1beta1\nkind: Deployment\nmetadata:\n  name: mysql\n  namespace: kube-system\nspec:\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app: mysql\n    spec:\n      containers:\n      - name: mysql\n        image: k8s-master:5000\/mysql:5.7\n        ports:\n        - containerPort: 3306\n        env:\n        - name: MYSQL_ROOT_PASSWORD\n          value: somewordpress\n        - name: MYSQL_DATABASE\n          value: wordpress\n        - name: MYSQL_USER\n          value: wordpress\n        - name: MYSQL_PASSWORD\n          value: wordpress\n---\n\napiVersion: v1\nkind: Service   #\u7b80\u79f0svc\nmetadata:\n  name: musql-svc\n  namespace: kube-system\nspec:\n  clusterIP: 10.254.86.101\n  type: ClusterIP\n  ports:\n    - port: 3306\n      targetPort: 3306    #pod port\n  selector:\n    app: mysql\n\n---\napiVersion: extensions\/v1beta1\nkind: Deployment\nmetadata:\n  name: wordpress\nspec:\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app: wordpress\n    spec:\n      containers:\n      - name: wordpress\n        image: k8s-master:5000\/wordpress:latest\n        ports:\n        - containerPort: 80\n        resources:\n          limits:\n            cpu: 100m\n          requests:\n            cpu: 100m\n        env:\n        - name: WORDPRESS_DB_HOST\n          value: musql-svc.kube-system.svc.cluster.local\n        - name: WORDPRESS_DB_USER\n          value: wordpress\n        - name: WORDPRESS_DB_PASSWORD\n          value: wordpress\n---\n\napiVersion: v1\nkind: Service   #\u7b80\u79f0svc\nmetadata:\n  name: wordpress-svc\nspec: \n  type: NodePort\n  ports:\n    - port: 80\n      nodePort: 31001\n      targetPort: 80   #pod port\n  selector:\n    app: wordpress\n&#91;root@k8s-master hpa]# kubectl apply -f deploy-wordpress2.yaml\n<\/code><\/pre>\n\n\n\n<p><strong><em>2.\u521b\u5efa\u5f39\u6027\u4f38\u7f29\u89c4\u5219<\/em><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>###\u57fa\u4e8eyaml\u6587\u4ef6\u521b\u5efa<\/strong>\n&#91;root@k8s-master hpa]# cat hpa.yaml \napiVersion: autoscaling\/v1\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: wordpress\n  namespace: default\nspec:\n  maxReplicas: 8 ###\u6700\u5927pod\u6570\n  minReplicas: 1 ###\u6700\u5c0fpod\u6570\n  scaleTargetRef: ###\u6269\u5bb9\u76f8\u5173\u9009\u62e9\u5668\n    apiVersion: extensions\/v1beta1 ###\u7248\u672c\u53f7\n    kind: Deployment  ###\u9700\u8981\u6269\u5bb9\u7684\u8d44\u6e90\u7c7b\u578b\n    name: wordpress ###\u8d44\u6e90\u7684\u540d\u5b57\n  targetCPUUtilizationPercentage: 5 ###cpu\u7684\u767e\u5206\u6bd4\uff0c\u8d85\u8fc7\u540e\u89e6\u53d1\u6269\u5bb9\n&#91;root@k8s-master hpa]# kubectl apply -f hpa.yaml\n<strong>##\u57fa\u4e8e\u547d\u4ee4\u884c\u521b\u5efa<\/strong>\nkubectl autoscale deployment wordpress --max=5 --min=2 --cpu-percent=5\n--max:\u6307\u5b9a\u6700\u5927\u7684Pod\u6570\u91cf\uff0c\u5982\u679c\u6307\u5b9a\u7684\u6570\u91cf\u8d8a\u5927\uff0c\u5219\u5f39\u6027\u4f38\u7f29\u7684\u8d44\u6e90\u521b\u5efa\u7684\u5c31\u8d8a\u591a\uff0c\u5bf9\u670d\u52a1\u5668\u8d44\u6e90\u4f1a\u8fdb\u884c\u6d88\u8017\u3002\n--minx:\u6307\u5b9a\u6700\u5c0f\u7684Pod\u6570\u91cf\u3002\n--cpu-percent:\u6307\u5b9aCPU\u7684\u767e\u5206\u6bd4\n<\/code><\/pre>\n\n\n\n<p><strong><em>3.\u4f7f\u7528ab\u5de5\u5177\u8fdb\u884c\u538b\u6d4b<\/em><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>##\u5b89\u88c5ab\u5de5\u5177\n&#91;root@k8s-master hpa]# yum -y install httpd-tools.x86_64\n##\u538b\u6d4b\u524dpod\u6570\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"359\" src=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-50.png\" alt=\"\" class=\"wp-image-1297\" srcset=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-50.png 865w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-50-300x125.png 300w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-50-768x319.png 768w\" sizes=\"(max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>###\u538b\u6d4b\u540epod\u6570<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"411\" src=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-51.png\" alt=\"\" class=\"wp-image-1298\" srcset=\"https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-51.png 865w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-51-300x143.png 300w, https:\/\/www.buyao007.icu\/wp-content\/uploads\/2022\/04\/image-51-768x365.png 768w\" sizes=\"(max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5b59\u5bcc\u9633\uff0c \u6c5f\u6e56\u4eba\u79f0\u6ca1\u4eba\u79f0\u3002\u591a\u5e74\u4e92\u8054\u7f51\u8fd0\u7ef4\u5de5\u4f5c\u7ecf\u9a8c\uff0c\u66fe\u8d1f\u8d23\u8fc7\u5b59\u5e03\u65af\u5927\u89c4\u6a21\u96c6\u7fa4\u67b6\u6784\u81ea\u52a8\u5316\u8fd0\u7ef4\u7ba1\u7406\u5de5\u4f5c\u3002\u64c5\u957fWeb\u96c6 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":246,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"_links":{"self":[{"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/posts\/1290"}],"collection":[{"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1290"}],"version-history":[{"count":4,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/posts\/1290\/revisions"}],"predecessor-version":[{"id":1337,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/posts\/1290\/revisions\/1337"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=\/wp\/v2\/media\/246"}],"wp:attachment":[{"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.buyao007.icu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}