一、概述
在阿里云 ubuntu 16.04 上部署单机版的 kubernetes 1.15.3。
二、详细步骤描述
分为四部分:实例准备、环境初始化、kuberenetes 安装、监控日志组件安装
- 实例准备
- 最低配置:4核8G,系统盘为 50G 高效云盘,安全组规则允许 80 和 443 有 TCP 流量进入
- 安装用户需要为root或可以sudo的用户
- 环境准备
a. 关闭 ufw
sudo systemctl stop ufw.service && sudo systemctl disable ufw.service
b. 安装 docker
curl -fsSL get.docker.com -o get-docker.shsudo sh get-docker.sh --mirror Aliyun
c. 启动 docker
sudo systemctl enable dockersudo systemctl start docker
d. 建立 docker 用户组,并将当前用户加入 docker 用户组
sudo groupadd dockersudo usermod -aG docker $USER
e. 配置镜像加速:对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
{"registry-mirrors": ["https://registry.docker-cn.com"]}
f. 重新启动 docker 服务
sudo systemctl daemon-reloadsudo systemctl restart docker
- kubernetes 安装
- 安装 kubeadm, kubelet 和 kubectl
sudo apt-get update &&sudo apt-get install -y apt-transport-httpscurl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg |sudo apt-key add -echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"|sudo tee /etc/apt/sources.list.d/kubernetes.listsudo 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-00sudo apt-mark hold kubelet kubeadm kubectl kubernetes-cni
- 安装 kubeadm, kubelet 和 kubectl
b. 重启 kubelet
sudo systemctl daemon-reloadsudo systemctl restart kubelet
c. 修改系统参数,解除防火墙限制: vim /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1
d. 使修改生效
sysctl -p
e.拉取当前版本 kubeadm 启动需要的镜像(都是 k8s.gcr.io 镜像,需要从阿里云 pull 并且 re-tag 成 k8s.gcr.io 镜像)
curl -fsSL https://gist.githubusercontent.com/li-ang/9ee63b670505f6801e781fd033a8d61f/raw/94fb265c4ba41018a7768de7a8fb06454c1bce8a/pull_kubeadm_image.sh -o pull_kubeadm_image.shsudo chmod a+x pull_kubeadm_image.sh &&sudo ./pull_kubeadm_image.sh
f. 初始化 kubeadm
sudo kubeadm init --apiserver-advertise-address=127.0.0.1 --pod-network-cidr=10.244.0.0/16
g. kubectl 配置
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $USER:$GROUP $HOME/.kube/config
h. 配置 flannel 网络
kubectl create -f https://gist.githubusercontent.com/li-ang/3b53dfdc09c6ba75639b9d3d4e44f468/raw/8f174c456202cb85099963afde0d35dfe59e352f/flannel.yamlkubectl get pod --all-namespaces# 等待所有 pod 都 Running
- 监控组件安装
- 将 yitu-facesaas-single-k8s.tar.gz 下载到主目录下
- tar -xvf yitu-facesaas-single-k8s.tar.gz && cd ./yitu-single-k8s
- 执行 install.sh 脚本
#!/bin/bashecho "load images"docker load < ./images.tarecho "安装 helm 和 tiller"#curl -sSL https://get.helm.sh/helm-v2.13.0-linux-amd64.tar.gz -o helm-v2.13.0-linux-amd64.tar.gztar -xvf helm-v2.13.0-linux-amd64.tar.gz && mv linux-amd64/helm /usr/local/bin && chmod a+x /usr/local/bin/helmecho "helm 初始化"kubectl taint nodes --all node-role.kubernetes.io/master-helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.13.0cat >helm-rbac-config.yaml<<EOFapiVersion: v1kind: ServiceAccountmetadata:name: tillernamespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata:name: tillerroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-adminsubjects:- kind: ServiceAccountname: tillernamespace: kube-systemEOFkubectl create -f helm-rbac-config.yamlkubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'echo "helm 安装完成'"echo "sleep 20s"sleep 20echo "安装 local-path-storage controller"if [ ! -d "/data" ]; thenmkdir /datafikubectl create -f ./local-path-storage.yamlecho "local-path-storage controller 安装完成"echo "安装 prometheu-operator"kubectl create ns monitorecho "create etcd-certs in monitor namespace"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.crtcd prometheus-operator && helm install --namespace monitor --name prometheus . && cd .. && kubectl apply -f node-exporter.yamlecho "prometheu-operator 安装完成"echo "安装 ingress-controller"kubectl create ns ingresscd 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 ../echo "ingress-controller 安装完成"
sudo ./install.sh## yitu-single-k8s 文件夹中的其他脚本不用管,./install.sh 执行一次即可
脚本主要内容是
1,安装helm软件包管理工具
2,使用helm安装 Prometheus Operatorchart 中包含多种组件:
三、查看是否创建成功(只需要开端口)
- 通过 kubectl get pod —all-namespaces 查看所有 Pod 是否都运行正常
- 所有 Pod 运行正常后,按照如下操作访问 Prometheus,查看监控是否正常
- kubectl -n monitor get ingress #查看pod域名
# linux 和 Mac 机器修改/etc/hosts添加如下内容,使用实际的Aliyun 实例公网 IP# 此处一定要开启实例所在在安全组的 80/443 端口规则,否则阿里云防火墙会将访问请求拦截。${Aliyun Instance Master IP} monitor-fs.situdata.com访问 monitor-fs.situdata.com/prometheus 是否成功
四、situ后续配置,ingress监听端口修改为28080
kubectl -n ingress edit daemonsets. ingress-nginx-ingress-controller -oyaml
ports:- containerPort: 80hostPort: 80 //修改为28080name: httpprotocol: TCP
修改完成后,删除一下ingress的Pod,获取PODname的方法:kubectl -n ingress get pod
删除Pod,kubectl -n ingress delete pod
如果想改监听域名
vim prometheus-operator/values.yamlhosts:- monitor.situdata.com
