初衷
- 由于公司采用的是微服务的服务架构,这段时间运维(人少,只有一位大佬呀心疼一波)那边有一丢丢压力,我想去帮助一下。So,正好借此机会去学习了kubenetes的搭建,并写下了这一份搭建手册(当然自己也想掌握搭建测试环境这一项技能哈哈哈哈😄)。
安装前期准备工作
环境准备 ubuntu 16.04.5 server x64 lts
1 | proxy http://118.25.xxx.xxx:8118 https://118.25.xxx.xxx:8118 |
1 | # 关闭缓存 |
本文中用到的插件版本
- calico 3.1
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml - kubernetes-dashboard 1.10
https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
安装必备的基础工具
1 | sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common |
安装docker
此次docker安装 使用
apt install docker-compose方法安装 docker版本为 17.03.2-ce(安装的版本为当前时间下的最新版本) 也可以使用下面的方法进行安装docker
1 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - #添加软件源验证密钥 |
1 | sudo vim /etc/systemd/system/multi-user.target.wants/docker.service fd:// --registry-mirror={加速器地址} #添加docker下载镜像加速 |
1 | sudo systemctl daemon-reload #重新加载配置文件 |
安装kubernetes环境
1 | *环境版本信息* |
切换su用户
1 | sudo su |
安装kubernetes软件源密钥
1 | curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - #安装kubernetes软件源密钥 |
安装kubernetes软件源
1 | cat <<EOF >/etc/apt/sources.list.d/kubernetes.list |
部署master节点
1 | # 安装kubelet kubectl kubeadm |
1 | # 初始化网络 |
部署node节点
1 | # 安装kubelet kubectl kubeadm |
安装kubernetes dashboard
1 | # 下载kubernetes-dashboard yaml文件 |
修改type为NodePort
1 | # 增加 type: NodePort (暴露端口供外部访问) |
准备kubernetes-dashboard-rbac.yaml认证文件
1 |
|
部署 kubernetes-dashboard
1 | # 部署 |
安装监控插件 heapster
1 | ref: https://github.com/kubernetes/heapster |
master节点参与工作负载
master节点默认不参与工作负载的原因
- 使用kubeadm初始化的集群,出于安全考虑Pod不会被调度到Master Node上,也就是说Master Node不参与工作负载。这是因为当前的master节点node1被打上了node-role.kubernetes.io/master:NoSchedule的污点;由于此处是用来搭建自己测试使用的环境,所以放开该限制可以提高资源利用率。
去掉master节点上的污点
1 | kubectl describe node | grep Taint --> Taints: node-role.kubernetes.io/master:NoSchedule |
问题记录
1
1 | Q. Heapster cannot dial API server |
2
1 | Q. 如果碰到nodePort无法访问的情况,只能通过pod所在节点的ip进行访问,很大可能是iptables的原因(新版本的docker 会将FORWORD的请求默认DROP) |
3
1 | Q. master上的pod访问不到node上的pod,ip ping不通 |
1 | google后发现问题解决方案 |
1 | 在calico.yaml文件中加上一下属性,重新apply即可 |
补充
如何使用secret
1 | # 创建tls.crt tls.key 并生成 k8s secret,使用secret |
Ingress暴露Https链接时遇到的问题
ingress暴露https连接时,需要添加一个支持https的
annotation,否则服务会报错tls: first record does not look like a TLS handshake
在ingress的yaml文件中添加
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"即可解决。Ingress Annotation Refer
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/
ERP搭建(java服务)启动时redis无法连接
- 修改/etc/redis/6379.conf中的配置,使redis监听所有的ip段,增加
bind 0.0.0.0即可。
Thanks For Watching!