kubernetes(K8S )安裝部署 【保姆級步驟保成功】
一、K8S環(huán)境準備
1、關閉firewalld和selinux(在k8s集群master和node上都進行操作)
? ? 臨時關閉
?? ?systemctl stop firewalld && systemctl disable firewalld && setenforce 0 && getenforce
?? ?
?? ?service firewalld stop && systemctl disable firewalld && setenforce 0 && getenforce
? ? 永久關閉
?? ?sed -i 's/enforcing/disabled/' /etc/selinux/config && sed -ri 's/.*swap.*/#&/' /etc/fstab
?? ?修改iptables (原因:kubernetes的service要通過iptables來做后端pod的轉發(fā)和路由)
?? ?cat > /etc/sysctl.d/k8s.conf <<EOF?
?? ?net.bridge.bridge-nf-call-ip6tables=1
?? ?net.bridge.bridge-nf-call-iptables=1
?? ?EOF
?? ?iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
2、在所有機器上安裝docker
? ? 更新docker的yum源
?? ?wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
?? ?安裝指定版本的docker
?? ?yum install docker-ce-19.03.13 -y
?? ?
?? ?修改docker的鏡像源,啟動服務
?? ?cd /etc
?? ?mkdir docker
?? ?cd docker
?? ?vim daemon.json #docker安裝后daemon.json文件尚未存在,需要手動創(chuàng)建
?? ?{
?? ? ? ?"registry-mirrors":["https://registry.docker-cn.com"] ,?
?? ? ? ?"exec-opts":["native.cgroupdriver=systemd"]?
?? ?}
?? ??? ?(注意事項:registry.docker-cn.com有時也并不能連接上,可以采用下列國內的公共的docker鏡像源:?#網(wǎng)易:???http://hub-mirror.c.163.com??#中國科技大學???https://docker.mirrors.ustc.edu.cn)
?
? ?systemctl daemon-reload
?? ?systemctl restart docker
?? ?systemctl enable docker.service #啟動docker服務
?? ?ps aux|grep docker
??? ?
3、關閉交換分區(qū)
? ? swapoff -a ?
?? ?free -m
4、重新命名主機名,并修改hosts文件
? ? ?cat >> /etc/hosts << EOF
?? ? 192.168.44.210 k8s-master
?? ? 192.168.44.211 k8s-node1
?? ? 192.168.44.212 k8s-node2
?? ? 192.168.44.213 k8s-node3
?? ? EOF
5、修改一些內核參數(shù)
? ? cat <<EOF >> ?/etc/sysctl.conf?
?? ?net.bridge.bridge-nf-call-ip6tables = 1
?? ?net.bridge.bridge-nf-call-iptables = 1
?? ?net.ipv4.ip_nonlocal_bind = 1
?? ?net.ipv4.ip_forward = 1
?? ?vm.swappiness=0?
?? ?EOF
?? ?讓參數(shù)生效到內核里面
?? ?sysctl -p?
6、安裝k8s
? ? 添加k8s的阿里云yum源
?? ?cat > /etc/yum.repos.d/kubernetes.repo <<EOF
?? ?[kubernetes]
?? ?name=Kubernetes
?? ?baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
?? ?enabled=1
?? ?gpgcheck=0
?? ?repo_gpgcheck=0
?? ?gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
?? ?EOF
?? ?安裝kubeadm,kubelet,kubectl,并且指定版本,因為1.24的版本默認運行時環(huán)境不是docker了
?? ?yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
?? ?啟動kubelet服務
?? ?systemctl enable kubelet.service?
? ? systemctl enable ?kubelet
?? ?用下面的命令檢查是否安裝
?? ?kubelet --version
?? ?yum list installed |grep kubelet
?? ?yum list installed |grep kubeadm
?? ?yum list installed |grep kubectl
7、部署kubernetes master
? ? 在master服務器上進行初始化操作
?? ?kubeadm init \
?? ?--apiserver-advertise-address=192.168.127.128 \
?? ?--image-repository registry.aliyuncs.com/google_containers \
?? ?--service-cidr=10.1.0.0/16 \
?? ?--pod-network-cidr=10.244.0.0/16
?? ?完成初始化的新建文件和目錄的操作,在master上完成?
?? ?mkdir -p $HOME/.kube
?? ?sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
?? ?sudo chown $(id -u):$(id -g) $HOME/.kube/config
8、將node節(jié)點服務器加入k8s集群
? ? 在三臺node節(jié)點服務器上都執(zhí)行
?? ?kubeadm join 192.168.127.128:6443 --token gby6wo.wi9mid4m745i58jm \
? ? ? ? --discovery-token-ca-cert-hash sha256:983ad455a06036bcb2b6dfb3f33f161cbe0edceeb13fa9c851659d260741e31b
?? ?在master上查看node節(jié)點信息
?? ?kubectl get nodes
? ? [NotReady 說明master和node節(jié)點之間的通信還是有問題的,容器之間通信還沒有準備好]
?
9.部署flannel應用安裝網(wǎng)絡插件flannel(在master節(jié)點執(zhí)行)
? ? 創(chuàng)建 kube-flannel.yaml 文件?
?? ?kubectl apply -f kube-flannel.yml
10、查看狀態(tài) kubectl get pods -n kube-system
[
swapoff -a
kubeadm reset
systemctl daemon-reload
systemctl restart kubelet
]
?
------------------------------------------------recommended.yaml----------------------------------------------------
# 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:
? type: NodePort
? ports:
? ? - port: 443
? ? ? targetPort: 8443
? ? ? nodePort: 30001
? 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:
? ? ? securityContext:
? ? ? ? seccompProfile:
? ? ? ? ? type: RuntimeDefault
? ? ? containers:
? ? ? ? - name: kubernetes-dashboard
? ? ? ? ? image: kubernetesui/dashboard:v2.5.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
? ? spec:
? ? ? securityContext:
? ? ? ? seccompProfile:
? ? ? ? ? type: RuntimeDefault
? ? ? containers:
? ? ? ? - name: dashboard-metrics-scraper
? ? ? ? ? image: kubernetesui/metrics-scraper:v1.0.7
? ? ? ? ? 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: {}
?
-------------------------------------------------kube-flannel.yml----------------------------------------------------文章來源:http://www.zghlxwxcb.cn/news/detail-739828.html
---
kind: Namespace
apiVersion: v1
metadata:
? name: kube-flannel
? labels:
? ? pod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
? name: flannel
rules:
- apiGroups:
? - ""
? resources:
? - pods
? verbs:
? - get
- apiGroups:
? - ""
? resources:
? - nodes
? verbs:
? - list
? - watch
- apiGroups:
? - ""
? resources:
? - nodes/status
? verbs:
? - patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
? name: flannel
roleRef:
? apiGroup: rbac.authorization.k8s.io
? kind: ClusterRole
? name: flannel
subjects:
- kind: ServiceAccount
? name: flannel
? namespace: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:
? name: flannel
? namespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:
? name: kube-flannel-cfg
? namespace: kube-flannel
? labels:
? ? tier: node
? ? app: flannel
data:
? cni-conf.json: |
? ? {
? ? ? "name": "cbr0",
? ? ? "cniVersion": "0.3.1",
? ? ? "plugins": [
? ? ? ? {
? ? ? ? ? "type": "flannel",
? ? ? ? ? "delegate": {
? ? ? ? ? ? "hairpinMode": true,
? ? ? ? ? ? "isDefaultGateway": true
? ? ? ? ? }
? ? ? ? },
? ? ? ? {
? ? ? ? ? "type": "portmap",
? ? ? ? ? "capabilities": {
? ? ? ? ? ? "portMappings": true
? ? ? ? ? }
? ? ? ? }
? ? ? ]
? ? }
? net-conf.json: |
? ? {
? ? ? "Network": "10.244.0.0/16",
? ? ? "Backend": {
? ? ? ? "Type": "vxlan"
? ? ? }
? ? }
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
? name: kube-flannel-ds
? namespace: kube-flannel
? labels:
? ? tier: node
? ? app: flannel
spec:
? selector:
? ? matchLabels:
? ? ? app: flannel
? template:
? ? metadata:
? ? ? labels:
? ? ? ? tier: node
? ? ? ? app: flannel
? ? spec:
? ? ? affinity:
? ? ? ? nodeAffinity:
? ? ? ? ? requiredDuringSchedulingIgnoredDuringExecution:
? ? ? ? ? ? nodeSelectorTerms:
? ? ? ? ? ? - matchExpressions:
? ? ? ? ? ? ? - key: kubernetes.io/os
? ? ? ? ? ? ? ? operator: In
? ? ? ? ? ? ? ? values:
? ? ? ? ? ? ? ? - linux
? ? ? hostNetwork: true
? ? ? priorityClassName: system-node-critical
? ? ? tolerations:
? ? ? - operator: Exists
? ? ? ? effect: NoSchedule
? ? ? serviceAccountName: flannel
? ? ? initContainers:
? ? ? - name: install-cni-plugin
? ? ? ?#image: flannelcni/flannel-cni-plugin:v1.1.0 for ppc64le and mips64le (dockerhub limitations may apply)
? ? ? ? image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.0
? ? ? ? command:
? ? ? ? - cp
? ? ? ? args:
? ? ? ? - -f
? ? ? ? - /flannel
? ? ? ? - /opt/cni/bin/flannel
? ? ? ? volumeMounts:
? ? ? ? - name: cni-plugin
? ? ? ? ? mountPath: /opt/cni/bin
? ? ? - name: install-cni
? ? ? ?#image: flannelcni/flannel:v0.19.1 for ppc64le and mips64le (dockerhub limitations may apply)
? ? ? ? image: docker.io/rancher/mirrored-flannelcni-flannel:v0.19.1
? ? ? ? command:
? ? ? ? - cp
? ? ? ? args:
? ? ? ? - -f
? ? ? ? - /etc/kube-flannel/cni-conf.json
? ? ? ? - /etc/cni/net.d/10-flannel.conflist
? ? ? ? volumeMounts:
? ? ? ? - name: cni
? ? ? ? ? mountPath: /etc/cni/net.d
? ? ? ? - name: flannel-cfg
? ? ? ? ? mountPath: /etc/kube-flannel/
? ? ? containers:
? ? ? - name: kube-flannel
? ? ? ?#image: flannelcni/flannel:v0.19.1 for ppc64le and mips64le (dockerhub limitations may apply)
? ? ? ? image: docker.io/rancher/mirrored-flannelcni-flannel:v0.19.1
? ? ? ? command:
? ? ? ? - /opt/bin/flanneld
? ? ? ? args:
? ? ? ? - --ip-masq
? ? ? ? - --kube-subnet-mgr
? ? ? ? resources:
? ? ? ? ? requests:
? ? ? ? ? ? cpu: "100m"
? ? ? ? ? ? memory: "50Mi"
? ? ? ? ? limits:
? ? ? ? ? ? cpu: "100m"
? ? ? ? ? ? memory: "50Mi"
? ? ? ? securityContext:
? ? ? ? ? privileged: false
? ? ? ? ? capabilities:
? ? ? ? ? ? add: ["NET_ADMIN", "NET_RAW"]
? ? ? ? env:
? ? ? ? - name: POD_NAME
? ? ? ? ? valueFrom:
? ? ? ? ? ? fieldRef:
? ? ? ? ? ? ? fieldPath: metadata.name
? ? ? ? - name: POD_NAMESPACE
? ? ? ? ? valueFrom:
? ? ? ? ? ? fieldRef:
? ? ? ? ? ? ? fieldPath: metadata.namespace
? ? ? ? - name: EVENT_QUEUE_DEPTH
? ? ? ? ? value: "5000"
? ? ? ? volumeMounts:
? ? ? ? - name: run
? ? ? ? ? mountPath: /run/flannel
? ? ? ? - name: flannel-cfg
? ? ? ? ? mountPath: /etc/kube-flannel/
? ? ? ? - name: xtables-lock
? ? ? ? ? mountPath: /run/xtables.lock
? ? ? volumes:
? ? ? - name: run
? ? ? ? hostPath:
? ? ? ? ? path: /run/flannel
? ? ? - name: cni-plugin
? ? ? ? hostPath:
? ? ? ? ? path: /opt/cni/bin
? ? ? - name: cni
? ? ? ? hostPath:
? ? ? ? ? path: /etc/cni/net.d
? ? ? - name: flannel-cfg
? ? ? ? configMap:
? ? ? ? ? name: kube-flannel-cfg
? ? ? - name: xtables-lock
? ? ? ? hostPath:
? ? ? ? ? path: /run/xtables.lock
? ? ? ? ? type: FileOrCreate
? ? ? ? ??文章來源地址http://www.zghlxwxcb.cn/news/detail-739828.html
到了這里,關于kubernetes(K8S )安裝部署 【保姆級步驟保成功】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!