A、至少2核CPU 2G內存 20G硬盤
B、必須在同一網段
本示例中分配為:

Master:10.170.0.7
Worker1:10.170.0.8
Worker2:10.170.0.9

2、ip addr確認是否有分配到IPV4地址。沒有的話nmtui,Automatically connect打上勾

3、用SSH連接

4、禁用防火墻,

systemctl stop firewalld & systemctl disable firewalld

5、禁用SELINUX

sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config
setenforce 0 

6、禁用swap

    A、swapoff -a
    B、vi /etc/fstab,注釋掉swap

7、重啟服務器,使其生效。

reboot

8、添加k8s源,建議使用阿里或者163的

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

9、安裝kubelet、kubeadm、kubectl

yum install -y kubectl kubeadm kubectl

10、kube-proxy開啟ipvs

vi /etc/sysctl.d/k8s.conf
vm.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

接下來還需要確保各個節點上已經安裝了ipset軟件包

yum install -y ipset

。 為了便于查看ipvs的代理規則,最好安裝一下管理工具

yum install -y ipvsadm

11、安裝docker

yum install -y docker
systemctl start docker & systemctl enable docker

12、設置開機啟動kubelet

systemctl enable kubelet

13、修改hostname(非常重要,如果hostname相同會導致問題)

hostnamectl set-hostname XXXX

14、初始化Master節點

kubeadm init --kubernetes-version=v1.15.3 --apiserver-advertise-address=10.170.0.7 --pod-network-cidr=10.170.0.0/16 --service-cidr=172.20.0.0/16

現在最新版的為:1.15.3,在執行時,若版本出錯,錯誤的信息中,會提示。

如果出現timeout是因為docker無法自動獲取到images導致的,可以兩種方式解決

A、手動去pull并修改標簽
B、修改docker源的方式來解決

15、手動pull images

docker pull mirrorgooglecontainers/kube-apiserver:v1.15.3
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.3
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.3
docker pull mirrorgooglecontainers/kube-proxy:v1.15.3
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.2.24
docker pull coredns/coredns:1.2.6
docker tag mirrorgooglecontainers/kube-proxy:v1.13.0  k8s.gcr.io/kube-proxy:v1.15.3
docker tag mirrorgooglecontainers/kube-scheduler:v1.13.0 k8s.gcr.io/kube-scheduler:v1.15.3
docker tag mirrorgooglecontainers/kube-apiserver:v1.13.0 k8s.gcr.io/kube-apiserver:v1.15.3
docker tag mirrorgooglecontainers/kube-controller-manager:v1.15.3 k8s.gcr.io/kube-controller-manager:v1.13.0
docker tag mirrorgooglecontainers/etcd:3.2.24  k8s.gcr.io/etcd:3.2.24
docker tag coredns/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
docker tag mirrorgooglecontainers/pause:3.1  k8s.gcr.io/pause:3.1

請注意版本號的問題,若是已更新,請相應的變更 。

16、修改docker源

kubeadm init --image-repository=mirrorgooglecontainers

17、重新執行第15步

18、啟動成功之后可以看到集群已經啟動成功,并且生成了worker加入集群的指令,只要在worker上執行即可加入集群

kubeadm join 10.170.0.7:6443 --token xrhtyd.b61v0mzuu6cea8qg \\\\
    --discovery-token-ca-cert-hash sha256:2e5cb96ef0be0e791acb923cf371303b13bda4613b4fd6d11a59bc17a7f8c3dd 

19、執行如下指令

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

20、這時候輸入kubectl get cs 就可以查看服務的運行情況,確保都在正常運行

21、安裝network addon(采用官方推薦的flannel方案,其中pod網段必須與之前init的時候設置的pod-network-cidr一致)

yum install -y wget
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml && kubectl apply -f  kube-flannel.yml

22、將worker join至master
至此集群已搭建完畢,這時候可以通過kubectl get nodes來查看各節點運行情況

安裝Prometheus
1、在各個節點下載docker對應鏡像

docker pull prom/node-exporter
docker pull prom/prometheus:v2.0.0
docker pull grafana/grafana:4.2.0

2、以daemonset方式部署node-export組件

vi node-exporter.yaml
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: node-exporter
  namespace: kube-system
  labels:
    k8s-app: node-exporter
spec:
  template:
    metadata:
      labels:
        k8s-app: node-exporter
    spec:
      containers:
      - image: prom/node-exporter
        name: node-exporter
        ports:
        - containerPort: 9100
          protocol: TCP
          name: http
---
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: node-exporter
  name: node-exporter
  namespace: kube-system
spec:
  ports:
  - name: http
    port: 9100
    nodePort: 31672
    protocol: TCP
  type: NodePort
  selector:
    k8s-app: node-exporter

kubectl create -f  node-exporter.yaml

3、部署prometheus組件

vi rabc-setup.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups: []
  resources:
  - nodes
  - nodes/proxy
  - services
  - endpoints
  - pods
  verbs: [get, list, watch]
- apiGroups:
  - extensions
  resources:
  - ingresses
  verbs: [get, list, watch]
- nonResourceURLs: [/metrics]
  verbs: [get]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus
  namespace: kube-system

4、以configmap的形式管理prometheus組件的配置文件

vi configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: kube-system
data:
  prometheus.yml: |
    global:
      scrape_interval:     15s
      evaluation_interval: 15s
    scrape_configs:

    - job_name: \\\'kubernetes-apiservers\\\'
      kubernetes_sd_configs:
      - role: endpoints
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs:
      - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
        action: keep
        regex: default;kubernetes;https

    - job_name: \\\'kubernetes-nodes\\\'
      kubernetes_sd_configs:
      - role: node
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(. )
      - target_label: __address__
        replacement: kubernetes.default.svc:443
      - source_labels: [__meta_kubernetes_node_name]
        regex: (. )
        target_label: __metrics_path__
        replacement: /api/v1/nodes/${1}/proxy/metrics

    - job_name: \\\'kubernetes-cadvisor\\\'
      kubernetes_sd_configs:
      - role: node
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(. )
      - target_label: __address__
        replacement: kubernetes.default.svc:443
      - source_labels: [__meta_kubernetes_node_name]
        regex: (. )
        target_label: __metrics_path__
        replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor

    - job_name: \\\'kubernetes-service-endpoints\\\'
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
        action: replace
        target_label: __scheme__
        regex: (https?)
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (. )
      - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
        action: replace
        target_label: __address__
        regex: ([^:] )(?::\\\\d )?;(\\\\d )
        replacement: $1:$2
      - action: labelmap
        regex: __meta_kubernetes_service_label_(. )
      - source_labels: [__meta_kubernetes_namespace]
        action: replace
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_service_name]
        action: replace
        target_label: kubernetes_name

    - job_name: \\\'kubernetes-services\\\'
      kubernetes_sd_configs:
      - role: service
      metrics_path: /probe
      params:
        module: [http_2xx]
      relabel_configs:
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]
        action: keep
        regex: true
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: blackbox-exporter.example.com:9115
      - source_labels: [__param_target]
        target_label: instance
      - action: labelmap
        regex: __meta_kubernetes_service_label_(. )
      - source_labels: [__meta_kubernetes_namespace]
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_service_name]
        target_label: kubernetes_name

    - job_name: \\\'kubernetes-ingresses\\\'
      kubernetes_sd_configs:
      - role: ingress
      relabel_configs:
      - source_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_probe]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
        regex: (. );(. );(. )
        replacement: ${1}://${2}${3}
        target_label: __param_target
      - target_label: __address__
        replacement: blackbox-exporter.example.com:9115
      - source_labels: [__param_target]
        target_label: instance
      - action: labelmap
        regex: __meta_kubernetes_ingress_label_(. )
      - source_labels: [__meta_kubernetes_namespace]
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_ingress_name]
        target_label: kubernetes_name

    - job_name: \\\'kubernetes-pods\\\'
      kubernetes_sd_configs:
      - role: pod
      relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (. )
      - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
        action: replace
        regex: ([^:] )(?::\\\\d )?;(\\\\d )
        replacement: $1:$2
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(. )
      - source_labels: [__meta_kubernetes_namespace]
        action: replace
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_pod_name]
        action: replace
        target_label: kubernetes_pod_name

5、deployment文件

vi prometheus.deploy.yml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  labels:
    name: prometheus-deployment
  name: prometheus
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
      - image: prom/prometheus:v2.0.0
        name: prometheus
        command:
        - /bin/prometheus
        args:
        - --config.file=/etc/prometheus/prometheus.yml
        - --storage.tsdb.path=/prometheus
        - --storage.tsdb.retention=24h
        ports:
        - containerPort: 9090
          protocol: TCP
        volumeMounts:
        - mountPath: /prometheus
          name: data
        - mountPath: /etc/prometheus
          name: config-volume
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 500m
            memory: 2500Mi
      serviceAccountName: prometheus    
      volumes:
      - name: data
        emptyDir: {}
      - name: config-volume
        configMap:
          name: prometheus-config

6、Prometheus service文件

vi prometheus.svc.yml
kind: Service
apiVersion: v1
metadata:
  labels:
    app: prometheus
  name: prometheus
  namespace: kube-system
spec:
  type: NodePort
  ports:
  - port: 9090
    targetPort: 9090
    nodePort: 30003
  selector:
    app: prometheus

7、創建文件

kubectl create -f  rbac-setup.yaml
kubectl create -f  configmap.yaml 
kubectl create -f  prometheus.deploy.yml 
kubectl create -f  prometheus.svc.yml

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » K8s集群搭建(kubeadm方案)

登錄

找回密碼

注冊

主站蜘蛛池模板: 精品午夜福利在线视在亚洲| 精品素人AV无码不卡在线观看| 国产免费午夜福利片在线| 日本真人添下面视频免费| 国产寡妇偷人在线观看| 一本大道色婷婷在线| 一个色综合亚洲热色综合| 人妻中文字幕不卡精品| 国产精品性色一区二区三区 | 精品无码一区在线观看| 扒开女人内裤猛进猛出免费视频| 99精品国产精品一区二区| 成人乱码一区二区三区四区| 无套内谢少妇一二三四| 国产成人精品一区二区三区免费| 日本福利一区二区精品| 亚洲另类在线制服丝袜国产| 裸身美女无遮挡永久免费视频| 久久热这里这里只有精品| 亚洲尤码不卡av麻豆| 精品国产成人午夜福利| 国产伦子沙发午休系列资源曝光| 激情内射亚州一区二区三区爱妻| 中文字幕在线日韩| 国产亚洲精品久久久久秋霞| 少妇无码AV无码专区| 国产精品普通话国语对白露脸| 老司机性色福利精品视频| 亚洲午夜无码久久久久小说| 牡丹江市| 欧美性群另类交| 国产播放91色在线观看| 亚洲 欧洲 自拍 偷拍 首页| 无码中文字幕热热久久| 久久国产精品久久久久久| 亚洲精品一二三中文字幕| 亚洲成人av综合一区| 天堂久久久久VA久久久久| 亚洲中文字幕无码爆乳app| 中文字幕在线视频不卡一区二区| 欧美人与动牲交a免费|