| @ -0,0 +1,29 @@ | |||||
| kubectl create -f recommended.yaml | |||||
| kubectl -n kubernetes-dashboard edit service kubernetes-dashboard | |||||
| kubectl -n kubernetes-dashboard get service kubernetes-dashboard | |||||
| cat <<EOF | kubectl apply -f - | |||||
| apiVersion: v1 | |||||
| kind: ServiceAccount | |||||
| metadata: | |||||
| name: admin-user | |||||
| namespace: kubernetes-dashboard | |||||
| EOF | |||||
| cat <<EOF | kubectl apply -f - | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| kind: ClusterRoleBinding | |||||
| metadata: | |||||
| name: admin-user | |||||
| roleRef: | |||||
| apiGroup: rbac.authorization.k8s.io | |||||
| kind: ClusterRole | |||||
| name: cluster-admin | |||||
| subjects: | |||||
| - kind: ServiceAccount | |||||
| name: admin-user | |||||
| namespace: kubernetes-dashboard | |||||
| EOF | |||||
| kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}" | |||||
| @ -0,0 +1,302 @@ | |||||
| # Copyright 2017 The Kubernetes Authors. | |||||
| # | |||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||||
| # you may not use this file except in compliance with the License. | |||||
| # You may obtain a copy of the License at | |||||
| # | |||||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||||
| # | |||||
| # Unless required by applicable law or agreed to in writing, software | |||||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
| # See the License for the specific language governing permissions and | |||||
| # limitations under the License. | |||||
| apiVersion: v1 | |||||
| kind: Namespace | |||||
| metadata: | |||||
| name: kubernetes-dashboard | |||||
| --- | |||||
| apiVersion: v1 | |||||
| kind: ServiceAccount | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| name: kubernetes-dashboard | |||||
| namespace: kubernetes-dashboard | |||||
| --- | |||||
| kind: Service | |||||
| apiVersion: v1 | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| name: kubernetes-dashboard | |||||
| namespace: kubernetes-dashboard | |||||
| spec: | |||||
| ports: | |||||
| - port: 443 | |||||
| targetPort: 8443 | |||||
| selector: | |||||
| k8s-app: kubernetes-dashboard | |||||
| --- | |||||
| apiVersion: v1 | |||||
| kind: Secret | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| name: kubernetes-dashboard-certs | |||||
| namespace: kubernetes-dashboard | |||||
| type: Opaque | |||||
| --- | |||||
| apiVersion: v1 | |||||
| kind: Secret | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| name: kubernetes-dashboard-csrf | |||||
| namespace: kubernetes-dashboard | |||||
| type: Opaque | |||||
| data: | |||||
| csrf: "" | |||||
| --- | |||||
| apiVersion: v1 | |||||
| kind: Secret | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| name: kubernetes-dashboard-key-holder | |||||
| namespace: kubernetes-dashboard | |||||
| type: Opaque | |||||
| --- | |||||
| kind: ConfigMap | |||||
| apiVersion: v1 | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| name: kubernetes-dashboard-settings | |||||
| namespace: kubernetes-dashboard | |||||
| --- | |||||
| kind: Role | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| name: kubernetes-dashboard | |||||
| namespace: kubernetes-dashboard | |||||
| rules: | |||||
| # Allow Dashboard to get, update and delete Dashboard exclusive secrets. | |||||
| - apiGroups: [""] | |||||
| resources: ["secrets"] | |||||
| resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"] | |||||
| verbs: ["get", "update", "delete"] | |||||
| # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map. | |||||
| - apiGroups: [""] | |||||
| resources: ["configmaps"] | |||||
| resourceNames: ["kubernetes-dashboard-settings"] | |||||
| verbs: ["get", "update"] | |||||
| # Allow Dashboard to get metrics. | |||||
| - apiGroups: [""] | |||||
| resources: ["services"] | |||||
| resourceNames: ["heapster", "dashboard-metrics-scraper"] | |||||
| verbs: ["proxy"] | |||||
| - apiGroups: [""] | |||||
| resources: ["services/proxy"] | |||||
| resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"] | |||||
| verbs: ["get"] | |||||
| --- | |||||
| kind: ClusterRole | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| name: kubernetes-dashboard | |||||
| rules: | |||||
| # Allow Metrics Scraper to get metrics from the Metrics server | |||||
| - apiGroups: ["metrics.k8s.io"] | |||||
| resources: ["pods", "nodes"] | |||||
| verbs: ["get", "list", "watch"] | |||||
| --- | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| kind: RoleBinding | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| name: kubernetes-dashboard | |||||
| namespace: kubernetes-dashboard | |||||
| roleRef: | |||||
| apiGroup: rbac.authorization.k8s.io | |||||
| kind: Role | |||||
| name: kubernetes-dashboard | |||||
| subjects: | |||||
| - kind: ServiceAccount | |||||
| name: kubernetes-dashboard | |||||
| namespace: kubernetes-dashboard | |||||
| --- | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| kind: ClusterRoleBinding | |||||
| metadata: | |||||
| name: kubernetes-dashboard | |||||
| roleRef: | |||||
| apiGroup: rbac.authorization.k8s.io | |||||
| kind: ClusterRole | |||||
| name: kubernetes-dashboard | |||||
| subjects: | |||||
| - kind: ServiceAccount | |||||
| name: kubernetes-dashboard | |||||
| namespace: kubernetes-dashboard | |||||
| --- | |||||
| kind: Deployment | |||||
| apiVersion: apps/v1 | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| name: kubernetes-dashboard | |||||
| namespace: kubernetes-dashboard | |||||
| spec: | |||||
| replicas: 1 | |||||
| revisionHistoryLimit: 10 | |||||
| selector: | |||||
| matchLabels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| template: | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: kubernetes-dashboard | |||||
| spec: | |||||
| containers: | |||||
| - name: kubernetes-dashboard | |||||
| image: kubernetesui/dashboard:v2.2.0 | |||||
| imagePullPolicy: Always | |||||
| ports: | |||||
| - containerPort: 8443 | |||||
| protocol: TCP | |||||
| args: | |||||
| - --auto-generate-certificates | |||||
| - --namespace=kubernetes-dashboard | |||||
| # Uncomment the following line to manually specify Kubernetes API server Host | |||||
| # If not specified, Dashboard will attempt to auto discover the API server and connect | |||||
| # to it. Uncomment only if the default does not work. | |||||
| # - --apiserver-host=http://my-address:port | |||||
| volumeMounts: | |||||
| - name: kubernetes-dashboard-certs | |||||
| mountPath: /certs | |||||
| # Create on-disk volume to store exec logs | |||||
| - mountPath: /tmp | |||||
| name: tmp-volume | |||||
| livenessProbe: | |||||
| httpGet: | |||||
| scheme: HTTPS | |||||
| path: / | |||||
| port: 8443 | |||||
| initialDelaySeconds: 30 | |||||
| timeoutSeconds: 30 | |||||
| securityContext: | |||||
| allowPrivilegeEscalation: false | |||||
| readOnlyRootFilesystem: true | |||||
| runAsUser: 1001 | |||||
| runAsGroup: 2001 | |||||
| volumes: | |||||
| - name: kubernetes-dashboard-certs | |||||
| secret: | |||||
| secretName: kubernetes-dashboard-certs | |||||
| - name: tmp-volume | |||||
| emptyDir: {} | |||||
| serviceAccountName: kubernetes-dashboard | |||||
| nodeSelector: | |||||
| "kubernetes.io/os": linux | |||||
| # Comment the following tolerations if Dashboard must not be deployed on master | |||||
| tolerations: | |||||
| - key: node-role.kubernetes.io/master | |||||
| effect: NoSchedule | |||||
| --- | |||||
| kind: Service | |||||
| apiVersion: v1 | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: dashboard-metrics-scraper | |||||
| name: dashboard-metrics-scraper | |||||
| namespace: kubernetes-dashboard | |||||
| spec: | |||||
| ports: | |||||
| - port: 8000 | |||||
| targetPort: 8000 | |||||
| selector: | |||||
| k8s-app: dashboard-metrics-scraper | |||||
| --- | |||||
| kind: Deployment | |||||
| apiVersion: apps/v1 | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: dashboard-metrics-scraper | |||||
| name: dashboard-metrics-scraper | |||||
| namespace: kubernetes-dashboard | |||||
| spec: | |||||
| replicas: 1 | |||||
| revisionHistoryLimit: 10 | |||||
| selector: | |||||
| matchLabels: | |||||
| k8s-app: dashboard-metrics-scraper | |||||
| template: | |||||
| metadata: | |||||
| labels: | |||||
| k8s-app: dashboard-metrics-scraper | |||||
| annotations: | |||||
| seccomp.security.alpha.kubernetes.io/pod: 'runtime/default' | |||||
| spec: | |||||
| containers: | |||||
| - name: dashboard-metrics-scraper | |||||
| image: kubernetesui/metrics-scraper:v1.0.6 | |||||
| ports: | |||||
| - containerPort: 8000 | |||||
| protocol: TCP | |||||
| livenessProbe: | |||||
| httpGet: | |||||
| scheme: HTTP | |||||
| path: / | |||||
| port: 8000 | |||||
| initialDelaySeconds: 30 | |||||
| timeoutSeconds: 30 | |||||
| volumeMounts: | |||||
| - mountPath: /tmp | |||||
| name: tmp-volume | |||||
| securityContext: | |||||
| allowPrivilegeEscalation: false | |||||
| readOnlyRootFilesystem: true | |||||
| runAsUser: 1001 | |||||
| runAsGroup: 2001 | |||||
| serviceAccountName: kubernetes-dashboard | |||||
| nodeSelector: | |||||
| "kubernetes.io/os": linux | |||||
| # Comment the following tolerations if Dashboard must not be deployed on master | |||||
| tolerations: | |||||
| - key: node-role.kubernetes.io/master | |||||
| effect: NoSchedule | |||||
| volumes: | |||||
| - name: tmp-volume | |||||
| emptyDir: {} | |||||
| @ -0,0 +1,12 @@ | |||||
| apiVersion: v1 | |||||
| kind: ConfigMap | |||||
| metadata: | |||||
| namespace: metallb-syste | |||||
| name: config | |||||
| data: | |||||
| config: | | |||||
| address-pools: | |||||
| - name: address-pool-1 | |||||
| protocol: layer2 | |||||
| addresses: | |||||
| - 192.168.100.201-192.168.100.254 | |||||
| @ -0,0 +1,394 @@ | |||||
| apiVersion: policy/v1beta1 | |||||
| kind: PodSecurityPolicy | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: controller | |||||
| namespace: metallb-system | |||||
| spec: | |||||
| allowPrivilegeEscalation: false | |||||
| allowedCapabilities: [] | |||||
| allowedHostPaths: [] | |||||
| defaultAddCapabilities: [] | |||||
| defaultAllowPrivilegeEscalation: false | |||||
| fsGroup: | |||||
| ranges: | |||||
| - max: 65535 | |||||
| min: 1 | |||||
| rule: MustRunAs | |||||
| hostIPC: false | |||||
| hostNetwork: false | |||||
| hostPID: false | |||||
| privileged: false | |||||
| readOnlyRootFilesystem: true | |||||
| requiredDropCapabilities: | |||||
| - ALL | |||||
| runAsUser: | |||||
| ranges: | |||||
| - max: 65535 | |||||
| min: 1 | |||||
| rule: MustRunAs | |||||
| seLinux: | |||||
| rule: RunAsAny | |||||
| supplementalGroups: | |||||
| ranges: | |||||
| - max: 65535 | |||||
| min: 1 | |||||
| rule: MustRunAs | |||||
| volumes: | |||||
| - configMap | |||||
| - secret | |||||
| - emptyDir | |||||
| --- | |||||
| apiVersion: policy/v1beta1 | |||||
| kind: PodSecurityPolicy | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: speaker | |||||
| namespace: metallb-system | |||||
| spec: | |||||
| allowPrivilegeEscalation: false | |||||
| allowedCapabilities: | |||||
| - NET_ADMIN | |||||
| - NET_RAW | |||||
| - SYS_ADMIN | |||||
| allowedHostPaths: [] | |||||
| defaultAddCapabilities: [] | |||||
| defaultAllowPrivilegeEscalation: false | |||||
| fsGroup: | |||||
| rule: RunAsAny | |||||
| hostIPC: false | |||||
| hostNetwork: true | |||||
| hostPID: false | |||||
| hostPorts: | |||||
| - max: 7472 | |||||
| min: 7472 | |||||
| privileged: true | |||||
| readOnlyRootFilesystem: true | |||||
| requiredDropCapabilities: | |||||
| - ALL | |||||
| runAsUser: | |||||
| rule: RunAsAny | |||||
| seLinux: | |||||
| rule: RunAsAny | |||||
| supplementalGroups: | |||||
| rule: RunAsAny | |||||
| volumes: | |||||
| - configMap | |||||
| - secret | |||||
| - emptyDir | |||||
| --- | |||||
| apiVersion: v1 | |||||
| kind: ServiceAccount | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: controller | |||||
| namespace: metallb-system | |||||
| --- | |||||
| apiVersion: v1 | |||||
| kind: ServiceAccount | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: speaker | |||||
| namespace: metallb-system | |||||
| --- | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| kind: ClusterRole | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: metallb-system:controller | |||||
| rules: | |||||
| - apiGroups: | |||||
| - '' | |||||
| resources: | |||||
| - services | |||||
| verbs: | |||||
| - get | |||||
| - list | |||||
| - watch | |||||
| - update | |||||
| - apiGroups: | |||||
| - '' | |||||
| resources: | |||||
| - services/status | |||||
| verbs: | |||||
| - update | |||||
| - apiGroups: | |||||
| - '' | |||||
| resources: | |||||
| - events | |||||
| verbs: | |||||
| - create | |||||
| - patch | |||||
| - apiGroups: | |||||
| - policy | |||||
| resourceNames: | |||||
| - controller | |||||
| resources: | |||||
| - podsecuritypolicies | |||||
| verbs: | |||||
| - use | |||||
| --- | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| kind: ClusterRole | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: metallb-system:speaker | |||||
| rules: | |||||
| - apiGroups: | |||||
| - '' | |||||
| resources: | |||||
| - services | |||||
| - endpoints | |||||
| - nodes | |||||
| verbs: | |||||
| - get | |||||
| - list | |||||
| - watch | |||||
| - apiGroups: | |||||
| - '' | |||||
| resources: | |||||
| - events | |||||
| verbs: | |||||
| - create | |||||
| - patch | |||||
| - apiGroups: | |||||
| - policy | |||||
| resourceNames: | |||||
| - speaker | |||||
| resources: | |||||
| - podsecuritypolicies | |||||
| verbs: | |||||
| - use | |||||
| --- | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| kind: Role | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: config-watcher | |||||
| namespace: metallb-system | |||||
| rules: | |||||
| - apiGroups: | |||||
| - '' | |||||
| resources: | |||||
| - configmaps | |||||
| verbs: | |||||
| - get | |||||
| - list | |||||
| - watch | |||||
| --- | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| kind: Role | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: pod-lister | |||||
| namespace: metallb-system | |||||
| rules: | |||||
| - apiGroups: | |||||
| - '' | |||||
| resources: | |||||
| - pods | |||||
| verbs: | |||||
| - list | |||||
| --- | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| kind: ClusterRoleBinding | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: metallb-system:controller | |||||
| roleRef: | |||||
| apiGroup: rbac.authorization.k8s.io | |||||
| kind: ClusterRole | |||||
| name: metallb-system:controller | |||||
| subjects: | |||||
| - kind: ServiceAccount | |||||
| name: controller | |||||
| namespace: metallb-system | |||||
| --- | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| kind: ClusterRoleBinding | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: metallb-system:speaker | |||||
| roleRef: | |||||
| apiGroup: rbac.authorization.k8s.io | |||||
| kind: ClusterRole | |||||
| name: metallb-system:speaker | |||||
| subjects: | |||||
| - kind: ServiceAccount | |||||
| name: speaker | |||||
| namespace: metallb-system | |||||
| --- | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| kind: RoleBinding | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: config-watcher | |||||
| namespace: metallb-system | |||||
| roleRef: | |||||
| apiGroup: rbac.authorization.k8s.io | |||||
| kind: Role | |||||
| name: config-watcher | |||||
| subjects: | |||||
| - kind: ServiceAccount | |||||
| name: controller | |||||
| - kind: ServiceAccount | |||||
| name: speaker | |||||
| --- | |||||
| apiVersion: rbac.authorization.k8s.io/v1 | |||||
| kind: RoleBinding | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| name: pod-lister | |||||
| namespace: metallb-system | |||||
| roleRef: | |||||
| apiGroup: rbac.authorization.k8s.io | |||||
| kind: Role | |||||
| name: pod-lister | |||||
| subjects: | |||||
| - kind: ServiceAccount | |||||
| name: speaker | |||||
| --- | |||||
| apiVersion: apps/v1 | |||||
| kind: DaemonSet | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| component: speaker | |||||
| name: speaker | |||||
| namespace: metallb-system | |||||
| spec: | |||||
| selector: | |||||
| matchLabels: | |||||
| app: metallb | |||||
| component: speaker | |||||
| template: | |||||
| metadata: | |||||
| annotations: | |||||
| prometheus.io/port: '7472' | |||||
| prometheus.io/scrape: 'true' | |||||
| labels: | |||||
| app: metallb | |||||
| component: speaker | |||||
| spec: | |||||
| containers: | |||||
| - args: | |||||
| - --port=7472 | |||||
| - --config=config | |||||
| env: | |||||
| - name: METALLB_NODE_NAME | |||||
| valueFrom: | |||||
| fieldRef: | |||||
| fieldPath: spec.nodeName | |||||
| - name: METALLB_HOST | |||||
| valueFrom: | |||||
| fieldRef: | |||||
| fieldPath: status.hostIP | |||||
| - name: METALLB_ML_BIND_ADDR | |||||
| valueFrom: | |||||
| fieldRef: | |||||
| fieldPath: status.podIP | |||||
| # needed when another software is also using memberlist / port 7946 | |||||
| #- name: METALLB_ML_BIND_PORT | |||||
| # value: "7946" | |||||
| - name: METALLB_ML_LABELS | |||||
| value: "app=metallb,component=speaker" | |||||
| - name: METALLB_ML_NAMESPACE | |||||
| valueFrom: | |||||
| fieldRef: | |||||
| fieldPath: metadata.namespace | |||||
| - name: METALLB_ML_SECRET_KEY | |||||
| valueFrom: | |||||
| secretKeyRef: | |||||
| name: memberlist | |||||
| key: secretkey | |||||
| image: metallb/speaker:v0.9.6 | |||||
| imagePullPolicy: Always | |||||
| name: speaker | |||||
| ports: | |||||
| - containerPort: 7472 | |||||
| name: monitoring | |||||
| resources: | |||||
| limits: | |||||
| cpu: 100m | |||||
| memory: 100Mi | |||||
| securityContext: | |||||
| allowPrivilegeEscalation: false | |||||
| capabilities: | |||||
| add: | |||||
| - NET_ADMIN | |||||
| - NET_RAW | |||||
| - SYS_ADMIN | |||||
| drop: | |||||
| - ALL | |||||
| readOnlyRootFilesystem: true | |||||
| hostNetwork: true | |||||
| nodeSelector: | |||||
| kubernetes.io/os: linux | |||||
| serviceAccountName: speaker | |||||
| terminationGracePeriodSeconds: 2 | |||||
| tolerations: | |||||
| - effect: NoSchedule | |||||
| key: node-role.kubernetes.io/master | |||||
| --- | |||||
| apiVersion: apps/v1 | |||||
| kind: Deployment | |||||
| metadata: | |||||
| labels: | |||||
| app: metallb | |||||
| component: controller | |||||
| name: controller | |||||
| namespace: metallb-system | |||||
| spec: | |||||
| revisionHistoryLimit: 3 | |||||
| selector: | |||||
| matchLabels: | |||||
| app: metallb | |||||
| component: controller | |||||
| template: | |||||
| metadata: | |||||
| annotations: | |||||
| prometheus.io/port: '7472' | |||||
| prometheus.io/scrape: 'true' | |||||
| labels: | |||||
| app: metallb | |||||
| component: controller | |||||
| spec: | |||||
| containers: | |||||
| - args: | |||||
| - --port=7472 | |||||
| - --config=config | |||||
| image: metallb/controller:v0.9.6 | |||||
| imagePullPolicy: Always | |||||
| name: controller | |||||
| ports: | |||||
| - containerPort: 7472 | |||||
| name: monitoring | |||||
| resources: | |||||
| limits: | |||||
| cpu: 100m | |||||
| memory: 100Mi | |||||
| securityContext: | |||||
| allowPrivilegeEscalation: false | |||||
| capabilities: | |||||
| drop: | |||||
| - all | |||||
| readOnlyRootFilesystem: true | |||||
| nodeSelector: | |||||
| kubernetes.io/os: linux | |||||
| securityContext: | |||||
| runAsNonRoot: true | |||||
| runAsUser: 65534 | |||||
| serviceAccountName: controller | |||||
| terminationGracePeriodSeconds: 0 | |||||
| @ -0,0 +1,6 @@ | |||||
| apiVersion: v1 | |||||
| kind: Namespace | |||||
| metadata: | |||||
| name: metallb-system | |||||
| labels: | |||||
| app: metallb | |||||
| @ -0,0 +1,20 @@ | |||||
| apiVersion: v1 | |||||
| kind: Pod | |||||
| metadata: | |||||
| name: nginx-example | |||||
| labels: | |||||
| app: nginx | |||||
| spec: | |||||
| containers: | |||||
| - name: nginx | |||||
| image: linuxserver/nginx | |||||
| ports: | |||||
| - containerPort: 80 | |||||
| name: "nginx-http" | |||||
| volumeMounts: | |||||
| - name: nginx-www-folder | |||||
| mountPath: /config/www | |||||
| volumes: | |||||
| - name: nginx-www-folder | |||||
| persistentVolumeClaim: | |||||
| claimName: nginx-pv-claim | |||||
| @ -0,0 +1,12 @@ | |||||
| apiVersion: v1 | |||||
| kind: PersistentVolume | |||||
| metadata: | |||||
| name: www-nginx-folder | |||||
| spec: | |||||
| capacity: | |||||
| storage: 2Gi | |||||
| accessModes: | |||||
| - ReadWriteMany | |||||
| nfs: | |||||
| server: haproxy-a-01 | |||||
| path: "/media/discodatos/nginx" | |||||
| @ -0,0 +1,13 @@ | |||||
| apiVersion: v1 | |||||
| kind: PersistentVolumeClaim | |||||
| metadata: | |||||
| name: nginx-pv-claim | |||||
| labels: | |||||
| app: nginx | |||||
| spec: | |||||
| accessModes: | |||||
| - ReadWriteMany | |||||
| storageClassName: "" | |||||
| resources: | |||||
| requests: | |||||
| storage: 2Gi | |||||
| @ -0,0 +1,11 @@ | |||||
| apiVersion: v1 | |||||
| kind: Service | |||||
| metadata: | |||||
| name: nginx-lb | |||||
| spec: | |||||
| type: LoadBalancer | |||||
| ports: | |||||
| - port: 80 | |||||
| targetPort: nginx-http | |||||
| selector: | |||||
| app: nginx | |||||
| @ -0,0 +1,13 @@ | |||||
| apiVersion: v1 | |||||
| kind: Service | |||||
| metadata: | |||||
| name: nginx-example | |||||
| spec: | |||||
| type: NodePort | |||||
| ports: | |||||
| - name: http | |||||
| port: 80 | |||||
| nodePort: 30080 | |||||
| targetPort: nginx-http | |||||
| selector: | |||||
| app: nginx | |||||
| @ -0,0 +1 @@ | |||||
| # k8s-cluster-projects | |||||
| @ -0,0 +1,7 @@ | |||||
| secretGenerator: | |||||
| - name: mysql-pass | |||||
| literals: | |||||
| - password=Dsa-0213 | |||||
| resources: | |||||
| - mysql-deployment.yaml | |||||
| - wordpress-deployment.yaml | |||||
| @ -0,0 +1,65 @@ | |||||
| apiVersion: v1 | |||||
| kind: Service | |||||
| metadata: | |||||
| name: wordpress-mysql | |||||
| labels: | |||||
| app: wordpress | |||||
| spec: | |||||
| ports: | |||||
| - port: 3306 | |||||
| selector: | |||||
| app: wordpress | |||||
| tier: mysql | |||||
| clusterIP: None | |||||
| --- | |||||
| apiVersion: v1 | |||||
| kind: PersistentVolumeClaim | |||||
| metadata: | |||||
| name: mysql-pv-claim | |||||
| labels: | |||||
| app: wordpress | |||||
| spec: | |||||
| accessModes: | |||||
| - ReadWriteMany | |||||
| resources: | |||||
| requests: | |||||
| storage: 20Gi | |||||
| --- | |||||
| apiVersion: apps/v1 | |||||
| kind: Deployment | |||||
| metadata: | |||||
| name: wordpress-mysql | |||||
| labels: | |||||
| app: wordpress | |||||
| spec: | |||||
| selector: | |||||
| matchLabels: | |||||
| app: wordpress | |||||
| tier: mysql | |||||
| strategy: | |||||
| type: Recreate | |||||
| template: | |||||
| metadata: | |||||
| labels: | |||||
| app: wordpress | |||||
| tier: mysql | |||||
| spec: | |||||
| containers: | |||||
| - image: mysql:5.6 | |||||
| name: mysql | |||||
| env: | |||||
| - name: MYSQL_ROOT_PASSWORD | |||||
| valueFrom: | |||||
| secretKeyRef: | |||||
| name: mysql-pass | |||||
| key: password | |||||
| ports: | |||||
| - containerPort: 3306 | |||||
| name: mysql | |||||
| volumeMounts: | |||||
| - name: mysql-persistent-storage | |||||
| mountPath: /var/lib/mysql | |||||
| volumes: | |||||
| - name: mysql-persistent-storage | |||||
| persistentVolumeClaim: | |||||
| claimName: mysql-pv-claim | |||||
| @ -0,0 +1,12 @@ | |||||
| apiVersion: v1 | |||||
| kind: PersistentVolume | |||||
| metadata: | |||||
| name: wp-data | |||||
| spec: | |||||
| capacity: | |||||
| storage: 20Gi | |||||
| accessModes: | |||||
| - ReadWriteMany | |||||
| nfs: | |||||
| server: haproxy-a-01 | |||||
| path: "/media/discodatos/wp-data" | |||||
| @ -0,0 +1,12 @@ | |||||
| apiVersion: v1 | |||||
| kind: PersistentVolume | |||||
| metadata: | |||||
| name: wp-folder | |||||
| spec: | |||||
| capacity: | |||||
| storage: 20Gi | |||||
| accessModes: | |||||
| - ReadWriteMany | |||||
| nfs: | |||||
| server: haproxy-a-01 | |||||
| path: "/media/discodatos/wp-folder" | |||||
| @ -0,0 +1,13 @@ | |||||
| apiVersion: v1 | |||||
| kind: PersistentVolumeClaim | |||||
| metadata: | |||||
| name: nginx-pv-claim | |||||
| labels: | |||||
| app: nginx | |||||
| spec: | |||||
| accessModes: | |||||
| - ReadWriteMany | |||||
| storageClassName: "" | |||||
| resources: | |||||
| requests: | |||||
| storage: 2Gi | |||||
| @ -0,0 +1,67 @@ | |||||
| apiVersion: v1 | |||||
| kind: Service | |||||
| metadata: | |||||
| name: wordpress | |||||
| labels: | |||||
| app: wordpress | |||||
| spec: | |||||
| ports: | |||||
| - port: 80 | |||||
| selector: | |||||
| app: wordpress | |||||
| tier: frontend | |||||
| type: LoadBalancer | |||||
| --- | |||||
| apiVersion: v1 | |||||
| kind: PersistentVolumeClaim | |||||
| metadata: | |||||
| name: wp-pv-claim | |||||
| labels: | |||||
| app: wordpress | |||||
| spec: | |||||
| accessModes: | |||||
| - ReadWriteMany | |||||
| resources: | |||||
| requests: | |||||
| storage: 20Gi | |||||
| --- | |||||
| apiVersion: apps/v1 | |||||
| kind: Deployment | |||||
| metadata: | |||||
| name: wordpress | |||||
| labels: | |||||
| app: wordpress | |||||
| spec: | |||||
| selector: | |||||
| matchLabels: | |||||
| app: wordpress | |||||
| tier: frontend | |||||
| strategy: | |||||
| type: Recreate | |||||
| template: | |||||
| metadata: | |||||
| labels: | |||||
| app: wordpress | |||||
| tier: frontend | |||||
| spec: | |||||
| containers: | |||||
| - image: wordpress:4.8-apache | |||||
| name: wordpress | |||||
| env: | |||||
| - name: WORDPRESS_DB_HOST | |||||
| value: wordpress-mysql | |||||
| - name: WORDPRESS_DB_PASSWORD | |||||
| valueFrom: | |||||
| secretKeyRef: | |||||
| name: mysql-pass | |||||
| key: password | |||||
| ports: | |||||
| - containerPort: 80 | |||||
| name: wordpress | |||||
| volumeMounts: | |||||
| - name: wordpress-persistent-storage | |||||
| mountPath: /var/www/html | |||||
| volumes: | |||||
| - name: wordpress-persistent-storage | |||||
| persistentVolumeClaim: | |||||
| claimName: wp-pv-claim | |||||