一、概述

在阿里云 ubuntu 16.04 上部署单机版的 kubernetes 1.15.3。

二、详细步骤描述

分为四部分:实例准备、环境初始化、kuberenetes 安装、监控日志组件安装

  1. 实例准备
    1. 最低配置:4核8G,系统盘为 50G 高效云盘,安全组规则允许 80 和 443 有 TCP 流量进入
    2. 安装用户需要为root或可以sudo的用户
  2. 环境准备

a. 关闭 ufw

  1. sudo systemctl stop ufw.service && sudo systemctl disable ufw.service

b. 安装 docker

  1. curl -fsSL get.docker.com -o get-docker.sh
  2. sudo sh get-docker.sh --mirror Aliyun

c. 启动 docker

  1. sudo systemctl enable docker
  2. sudo systemctl start docker

d. 建立 docker 用户组,并将当前用户加入 docker 用户组

  1. sudo groupadd docker
  2. sudo usermod -aG docker $USER

e. 配置镜像加速:对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

  1. {
  2. "registry-mirrors": [
  3. "https://registry.docker-cn.com"
  4. ]
  5. }

f. 重新启动 docker 服务

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart docker
  1. kubernetes 安装
    1. 安装 kubeadm, kubelet 和 kubectl
      1. sudo apt-get update &&sudo apt-get install -y apt-transport-https
      2. curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg |sudo apt-key add -
      3. echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"|sudo tee /etc/apt/sources.list.d/kubernetes.list
      4. sudo apt-get update&&sudo apt-get install -y kubeadm=1.15.3-00 kubectl=1.15.3-00 kubelet=1.15.3-00 kubernetes-cni=0.7.5-00
      5. sudo apt-mark hold kubelet kubeadm kubectl kubernetes-cni

b. 重启 kubelet

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart kubelet

c. 修改系统参数,解除防火墙限制: vim /etc/sysctl.conf

  1. net.bridge.bridge-nf-call-ip6tables = 1
  2. net.bridge.bridge-nf-call-iptables = 1

d. 使修改生效

  1. sysctl -p

e.拉取当前版本 kubeadm 启动需要的镜像(都是 k8s.gcr.io 镜像,需要从阿里云 pull 并且 re-tag 成 k8s.gcr.io 镜像)

  1. curl -fsSL https://gist.githubusercontent.com/li-ang/9ee63b670505f6801e781fd033a8d61f/raw/94fb265c4ba41018a7768de7a8fb06454c1bce8a/pull_kubeadm_image.sh -o pull_kubeadm_image.sh
  2. sudo chmod a+x pull_kubeadm_image.sh &&sudo ./pull_kubeadm_image.sh

f. 初始化 kubeadm

  1. sudo kubeadm init --apiserver-advertise-address=127.0.0.1 --pod-network-cidr=10.244.0.0/16

g. kubectl 配置

  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $USER:$GROUP $HOME/.kube/config

h. 配置 flannel 网络

  1. kubectl create -f https://gist.githubusercontent.com/li-ang/3b53dfdc09c6ba75639b9d3d4e44f468/raw/8f174c456202cb85099963afde0d35dfe59e352f/flannel.yaml
  2. kubectl get pod --all-namespaces
  3. # 等待所有 pod 都 Running
  1. 监控组件安装
    1. 将 yitu-facesaas-single-k8s.tar.gz 下载到主目录下
    2. tar -xvf yitu-facesaas-single-k8s.tar.gz && cd ./yitu-single-k8s
    3. 执行 install.sh 脚本
  1. #!/bin/bash
  2. echo "load images"
  3. docker load < ./images.tar
  4. echo "安装 helm 和 tiller"
  5. #curl -sSL https://get.helm.sh/helm-v2.13.0-linux-amd64.tar.gz -o helm-v2.13.0-linux-amd64.tar.gz
  6. tar -xvf helm-v2.13.0-linux-amd64.tar.gz && mv linux-amd64/helm /usr/local/bin && chmod a+x /usr/local/bin/helm
  7. echo "helm 初始化"
  8. kubectl taint nodes --all node-role.kubernetes.io/master-
  9. helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.13.0
  10. cat >helm-rbac-config.yaml<<EOF
  11. apiVersion: v1
  12. kind: ServiceAccount
  13. metadata:
  14. name: tiller
  15. namespace: kube-system
  16. ---
  17. apiVersion: rbac.authorization.k8s.io/v1beta1
  18. kind: ClusterRoleBinding
  19. metadata:
  20. name: tiller
  21. roleRef:
  22. apiGroup: rbac.authorization.k8s.io
  23. kind: ClusterRole
  24. name: cluster-admin
  25. subjects:
  26. - kind: ServiceAccount
  27. name: tiller
  28. namespace: kube-system
  29. EOF
  30. kubectl create -f helm-rbac-config.yaml
  31. kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
  32. echo "helm 安装完成'"
  33. echo "sleep 20s"
  34. sleep 20
  35. echo "安装 local-path-storage controller"
  36. if [ ! -d "/data" ]; then
  37. mkdir /data
  38. fi
  39. kubectl create -f ./local-path-storage.yaml
  40. echo "local-path-storage controller 安装完成"
  41. echo "安装 prometheu-operator"
  42. kubectl create ns monitor
  43. echo "create etcd-certs in monitor namespace"
  44. kubectl --kubeconfig=$HOME/.kube/config create secret -n monitor generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.crt --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.key --from-file=/etc/kubernetes/pki/etcd/ca.crt
  45. cd prometheus-operator && helm install --namespace monitor --name prometheus . && cd .. && kubectl apply -f node-exporter.yaml
  46. echo "prometheu-operator 安装完成"
  47. echo "安装 ingress-controller"
  48. kubectl create ns ingress
  49. cd nginx-ingress && helm install --namespace ingress --name ingress --set controller.daemonset.useHostPort=true,controller.service.type=,controller.service.nodePorts.http=80,controller.service.nodePorts.https=443 . && cd ../
  50. echo "ingress-controller 安装完成"
  1. sudo ./install.sh
  2. ## yitu-single-k8s 文件夹中的其他脚本不用管,./install.sh 执行一次即可

脚本主要内容是
1,安装helm软件包管理工具
2,使用helm安装 Prometheus Operatorchart 中包含多种组件:

3,安装 ingress-controller

三、查看是否创建成功(只需要开端口)

  1. 通过 kubectl get pod —all-namespaces 查看所有 Pod 是否都运行正常
  2. 所有 Pod 运行正常后,按照如下操作访问 Prometheus,查看监控是否正常
  3. kubectl -n monitor get ingress #查看pod域名
  1. # linux 和 Mac 机器修改/etc/hosts添加如下内容,使用实际的Aliyun 实例公网 IP
  2. # 此处一定要开启实例所在在安全组的 80/443 端口规则,否则阿里云防火墙会将访问请求拦截。
  3. ${Aliyun Instance Master IP} monitor-fs.situdata.com
  4. 访问 monitor-fs.situdata.com/prometheus 是否成功

四、situ后续配置,ingress监听端口修改为28080

kubectl -n ingress edit daemonsets. ingress-nginx-ingress-controller -oyaml

  1. ports:
  2. - containerPort: 80
  3. hostPort: 80 //修改为28080
  4. name: http
  5. protocol: TCP

修改完成后,删除一下ingress的Pod,获取PODname的方法:kubectl -n ingress get pod
删除Pod,kubectl -n ingress delete pod

如果想改监听域名

  1. vim prometheus-operator/values.yaml
  2. hosts:
  3. - monitor.situdata.com