美文网首页
kubeadm安装kubernetes 1.11.1(单mast

kubeadm安装kubernetes 1.11.1(单mast

作者: 平_方 | 来源:发表于2018-12-25 13:36 被阅读0次

    环境准备

    image.png

    安装目标

    安装 Docker 和 kubeadm
    部署 Kubernetes Master
    部署容器网络插件
    部署 Dashboard 可视化插件

    初始化设置

    自行配置IP和主机名

    关闭selinux

    关闭firewall并关闭开机自启动

    systemctl stop firewalld
    systemctl disable firewalld
    修改主机名
    是master-80.111
    关闭swap
    swapoff -a
    将/etc/fstab关于swap的内容注释

    安装docker

    yum -y install docker

    启动docker

    systemctl start docker

    设置docker开机自启动

    systemctl enable docker

    安装kubeadm

    配置kubeadm的yum源

    vi /etc/yum.repos.d/kubernetes.repo

    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=0
    

    安装1.11.1版本

    yum install -y kubeadm-1.11.1 kubectl-1.11.1 kubelet-1.11.1
    

    设置kubelet开机自启动并启动

    systemctl enable kubelet.service && systemctl start kubelet
    

    修改网络配置

    vi /etc/sysctl.d/k8s.conf

    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    

    #sysctl --system

    部署kubernetes的master节点

    编写kubeadm.yaml

    cd /etc/kubernetes/manifests
    vi kubeadm.yaml

    apiVersion: kubeadm.k8s.io/v1alpha1
    kind: MasterConfiguration
    controllerManagerExtraArgs:
     horizontal-pod-autoscaler-use-rest-clients: "true"
     horizontal-pod-autoscaler-sync-period: "10s"
     node-monitor-grace-period: "10s"
    apiServerExtraArgs:
     runtime-config: "api/all=true"
    kubernetesVersion: "v1.11.1"
    

    说明

    这个配置,我给kube-controller-manager 设置了:
    horizontal-pod-autoscaler-use-rest-clients: "true"
    表示部署的kube-controller-manager 能够使用自定义资源(Custom Metrics)进行自动水平扩展。

    部署master

    kubeadm init --config kubeadm.yaml
    会出现以下结果


    image.png

    k8s.gcr.io国内被墙了,需要无法直接使用,需要自己下载

    docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.11.1
    docker pull mirrorgooglecontainers/kube-controller-manager-amd64:v1.11.1
    docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.11.1
    docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.11.1
    docker pull mirrorgooglecontainers/pause:3.1
    docker pull mirrorgooglecontainers/etcd-amd64:3.2.18
    docker pull coredns/coredns:1.1.3
    

    修改成自己需要的镜像名(根据自己情况修改)

    docker tag docker.io/mirrorgooglecontainers/kube-apiserver-amd64:v1.11.1 k8s.gcr.io/kube-apiserver-amd64:v1.11.1
    docker tag docker.io/mirrorgooglecontainers/kube-controller-manager-amd64:v1.11.1 k8s.gcr.io/kube-controller-manager-amd64:v1.11.1
    docker tag docker.io/mirrorgooglecontainers/kube-scheduler-amd64:v1.11.1 k8s.gcr.io/kube-scheduler-amd64:v1.11.1
    docker tag docker.io/mirrorgooglecontainers/kube-proxy-amd64:v1.11.1 k8s.gcr.io/kube-proxy-amd64:v1.11.1
    docker tag docker.io/mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
    docker tag docker.io/mirrorgooglecontainers/etcd-amd64:3.2.18 k8s.gcr.io/etcd-amd64:3.2.18
    docker tag docker.io/coredns/coredns:1.1.3 k8s.gcr.io/coredns:1.1.3
    

    下载完镜像在执行kubeadm init --config kubeadm.yaml就不会报错了
    正确结果如下图:


    image.png

    master的部署需要几分钟,这个kubeadm join命令,就是用来给这个Master节点添加更多工作节点(Worker)的命令。

    查看master节点状态

    [root@localhost ~]# kubectl get nodes


    image.png

    报错

    image.png

    解决办法

    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    或者
    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
    

    7.部署网络插件

    插件安装

    网络插件安装很简单,只需要执行kubectl apply指令,以weave为例:

    kubectl apply -f https://git.io/weave-kube-1.6
    

    查看Pod节点状态

    kubectl get pods -n kube-system
    
    image.png

    上图看到所有的Pod都启动成功了,部署的 Weave 网络插件则在 kube-system 下面新建了一个名叫 weave-net-nxccd 的 Pod

    删除污点

    kubectl taint nodes --all node-role.kubernetes.io/master-
    

    kubernetes部署就告一段落了,接下来部署插件

    插件安装

    Dashboard可视化插件

    准备镜像

    docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.0
    docker tag docker.io/mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0
    

    安装插件

    kubectl apply -f kubernetes-dashboard.yaml
    

    文件内容如下:
    cat kubernetes-dashboard.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.
    
    # ------------------- Dashboard Secret ------------------- #
    
    apiVersion: v1
    kind: Secret
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      name: kubernetes-dashboard-certs
      namespace: kube-system
    type: Opaque
    
    ---
    # ------------------- Dashboard Service Account ------------------- #
    
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      name: kubernetes-dashboard
      namespace: kube-system
    
    ---
    # ------------------- Dashboard Role & Role Binding ------------------- #
    
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: kubernetes-dashboard-minimal
    "kubernetes-dashboard.yaml" 162L, 4582C
              # - --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
          volumes:
          - name: kubernetes-dashboard-certs
            secret:
              secretName: kubernetes-dashboard-certs
          - name: tmp-volume
            emptyDir: {}
          serviceAccountName: kubernetes-dashboard
          # Comment the following tolerations if Dashboard must not be deployed on master
          tolerations:
          - key: node-role.kubernetes.io/master
            effect: NoSchedule
    
    ---
    # ------------------- Dashboard Service ------------------- #
    
    kind: Service
    apiVersion: v1
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      name: kubernetes-dashboard
      namespace: kube-system
    spec:
      ports:
        - port: 443
          targetPort: 8443
      selector:
        k8s-app: kubernetes-dashboard
    

    查看Dashboard对应的Pod状态

    kubectl get pods -n kube-system
    
    image.png

    开启代理

    kubectl  proxy --address=0.0.0.0 --accept-hosts=^*$ &
    

    登录地址

    http://master-80.111:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=default
    

    在登录界面选择跳过
    显示如下


    image.png

    因为跳过了登录页面,由于权限问题目前无法看到任何内容

    授权Dashboard账户

    创建dashboard-admin.yaml

    vi dashboard-admin.yaml

    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRoleBinding
    metadata:
      name: kubernetes-dashboard
      labels:
        k8s-app: kubernetes-dashboard
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: kubernetes-dashboard
      namespace: kube-system
    

    部署dashboard-admin.yaml

    kubectl create -f dashboard-admin.yaml
    

    页面访问

    image.png

    安装heapster插件

    为了能在Dashboard中查看节点状态,需要安装Dashboard Heapster插件

    准备镜像

    docker pull mirrorgooglecontainers/heapster-amd64:v1.5.4
    docker pull mirrorgooglecontainers/heapster-influxdb-amd64:v1.5.2
    docker pull mirrorgooglecontainers/heapster-grafana-amd64:v5.0.4
    docker tag docker.io/mirrorgooglecontainers/heapster-amd64:v1.5.4 k8s.gcr.io/heapster-amd64:v1.5.4
    docker tag docker.io/mirrorgooglecontainers/heapster-influxdb-amd64:v1.5.2 k8s.gcr.io/heapster-influxdb-amd64:v1.5.2
    docker tag docker.io/mirrorgooglecontainers/heapster-grafana-amd64:v5.0.4 k8s.gcr.io/heapster-grafana-amd64:v5.0.4
    

    准备部署文件

    grafana.yaml

    cat grafana.yaml

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: monitoring-grafana
      namespace: kube-system
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            task: monitoring
            k8s-app: grafana
        spec:
          containers:
          - name: grafana
            image: k8s.gcr.io/heapster-grafana-amd64:v5.0.4
            ports:
            - containerPort: 3000
              protocol: TCP
            volumeMounts:
            - mountPath: /etc/ssl/certs
              name: ca-certificates
              readOnly: true
            - mountPath: /var
              name: grafana-storage
            env:
            - name: INFLUXDB_HOST
              value: monitoring-influxdb
            - name: GF_SERVER_HTTP_PORT
              value: "3000"
              # The following env variables are required to make Grafana accessible via
              # the kubernetes api-server proxy. On production clusters, we recommend
              # removing these env variables, setup auth for grafana, and expose the grafana
              # service using a LoadBalancer or a public IP.
            - name: GF_AUTH_BASIC_ENABLED
              value: "false"
            - name: GF_AUTH_ANONYMOUS_ENABLED
              value: "true"
            - name: GF_AUTH_ANONYMOUS_ORG_ROLE
              value: Admin
            - name: GF_SERVER_ROOT_URL
              # If you're only using the API Server proxy, set this value instead:
              # value: /api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
              value: /
          volumes:
          - name: ca-certificates
            hostPath:
              path: /etc/ssl/certs
          - name: grafana-storage
            emptyDir: {}
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
        # If you are NOT using this as an addon, you should comment out this line.
        kubernetes.io/cluster-service: 'true'
        kubernetes.io/name: monitoring-grafana
      name: monitoring-grafana
      namespace: kube-system
    spec:
      # In a production setup, we recommend accessing Grafana through an external Loadbalancer
      # or through a public IP.
      # type: LoadBalancer
      # You could also use NodePort to expose the service at a randomly-generated port
      # type: NodePort
      ports:
      - port: 80
        targetPort: 3000
      selector:
        k8s-app: grafana 
    

    heapster.yaml

    cat heapster.yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: heapster
      namespace: kube-system
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: heapster
      namespace: kube-system
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            task: monitoring
            k8s-app: heapster
        spec:
          serviceAccountName: heapster
          containers:
          - name: heapster
            image: k8s.gcr.io/heapster-amd64:v1.5.4
            imagePullPolicy: IfNotPresent
            command:
            - /heapster
            - --source=kubernetes:https://kubernetes.default?kubeletHttps=true&kubeletPort=10250&insecure=true
            - --sink=influxdb:http://monitoring-influxdb.kube-system.svc:8086
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        task: monitoring
        # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
        # If you are NOT using this as an addon, you should comment out this line.
        kubernetes.io/cluster-service: 'true'
        kubernetes.io/name: Heapster
      name: heapster
      namespace: kube-system
    spec:
      ports:
      - port: 80
        targetPort: 8082
      selector:
        k8s-app: heapster
    

    heapster-rbac.yaml

    cat heapster-rbac.yaml

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: heapster
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:heapster
    subjects:
    - kind: ServiceAccount
      name: heapster
      namespace: kube-system
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: heapster-kubelet-api
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:kubelet-api-admin
    subjects:
    - kind: ServiceAccount
      name: heapster
      namespace: kube-system
    

    influxdb.yaml

    cat influxdb.yaml

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: monitoring-influxdb
      namespace: kube-system
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            task: monitoring
            k8s-app: influxdb
        spec:
          containers:
          - name: influxdb
            image: k8s.gcr.io/heapster-influxdb-amd64:v1.5.2
            volumeMounts:
            - mountPath: /data
              name: influxdb-storage
          volumes:
          - name: influxdb-storage
            emptyDir: {}
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        task: monitoring
        # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
        # If you are NOT using this as an addon, you should comment out this line.
        kubernetes.io/cluster-service: 'true'
        kubernetes.io/name: monitoring-influxdb
      name: monitoring-influxdb
      namespace: kube-system
    spec:
      ports:
      - port: 8086
        targetPort: 8086
      selector:
    k8s-app: influxdb 
    

    部署插件

    kubectl create -f ./grafana.yaml
    kubectl create -f ./heapster.yaml
    kubectl create -f ./influxdb.yaml 
    kubectl create -f ./heapster-rbac.yaml
    

    Dashboard显示

    image.png

    相关文章

      网友评论

          本文标题:kubeadm安装kubernetes 1.11.1(单mast

          本文链接:https://www.haomeiwen.com/subject/xxxthqtx.html