一、概述
在阿里云 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.sh
sudo sh get-docker.sh --mirror Aliyun
c. 启动 docker
sudo systemctl enable docker
sudo systemctl start docker
d. 建立 docker 用户组,并将当前用户加入 docker 用户组
sudo groupadd docker
sudo usermod -aG docker $USER
e. 配置镜像加速:对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
f. 重新启动 docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
- kubernetes 安装
- 安装 kubeadm, kubelet 和 kubectl
sudo apt-get update &&sudo apt-get install -y apt-transport-https
curl 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.list
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
sudo apt-mark hold kubelet kubeadm kubectl kubernetes-cni
- 安装 kubeadm, kubelet 和 kubectl
b. 重启 kubelet
sudo systemctl daemon-reload
sudo systemctl restart kubelet
c. 修改系统参数,解除防火墙限制: vim /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.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.sh
sudo 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/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $USER:$GROUP $HOME/.kube/config
h. 配置 flannel 网络
kubectl create -f https://gist.githubusercontent.com/li-ang/3b53dfdc09c6ba75639b9d3d4e44f468/raw/8f174c456202cb85099963afde0d35dfe59e352f/flannel.yaml
kubectl 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/bash
echo "load images"
docker load < ./images.tar
echo "安装 helm 和 tiller"
#curl -sSL https://get.helm.sh/helm-v2.13.0-linux-amd64.tar.gz -o helm-v2.13.0-linux-amd64.tar.gz
tar -xvf helm-v2.13.0-linux-amd64.tar.gz && mv linux-amd64/helm /usr/local/bin && chmod a+x /usr/local/bin/helm
echo "helm 初始化"
kubectl taint nodes --all node-role.kubernetes.io/master-
helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.13.0
cat >helm-rbac-config.yaml<<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
EOF
kubectl create -f helm-rbac-config.yaml
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
echo "helm 安装完成'"
echo "sleep 20s"
sleep 20
echo "安装 local-path-storage controller"
if [ ! -d "/data" ]; then
mkdir /data
fi
kubectl create -f ./local-path-storage.yaml
echo "local-path-storage controller 安装完成"
echo "安装 prometheu-operator"
kubectl create ns monitor
echo "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.crt
cd prometheus-operator && helm install --namespace monitor --name prometheus . && cd .. && kubectl apply -f node-exporter.yaml
echo "prometheu-operator 安装完成"
echo "安装 ingress-controller"
kubectl create ns ingress
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 ../
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: 80
hostPort: 80 //修改为28080
name: http
protocol: TCP
修改完成后,删除一下ingress的Pod,获取PODname的方法:kubectl -n ingress get pod
删除Pod,kubectl -n ingress delete pod
如果想改监听域名
vim prometheus-operator/values.yaml
hosts:
- monitor.situdata.com