Ubuntu18.04 搭建 k8s
微服务是一种架构思想,实际的开发采用分布式系统开发,分布式系统开发就一定会遇到四个问题。
微服务架构,是为了实现三大指标: 高可用、高性能、高并发
- 负载均衡: 能够实现轮询
- 集群: 必须要实现数据同步,Redis
- 高可用: 一直可以用,必须实现崩溃恢复,必须奇数部署,方便选举
Ubuntu基础配置
时区统一
1 | dpkg-reconfigure tzdata |
时间统一
1 | apt install ntpdate |
设置系统时间与网络时间同步
1 | ntpdate cn.pool.ntp.org |
将系统时间写入硬件时间
1 | hwclock --systohc |
IPVS IP虚拟服务器
1 | apt install -y ipset ipvsadm |
创建配置并加载IPVS模块
1 | mkdir -p /etc/sysconfig/modules/ |
配置内核参数
1 | vi /etc/sysctl.d/k8s.conf |
用户
1 | 启用ssh |
虚拟机网络配置
NAT模式: 子网地址:192.168.79.0, 网关:192.168.79.2,DHCP:起始 192.168.79.128、结束 192.168.79.254,掩码:24
1 | # This file describes the network interfaces available on your system |
配置宿主机,不配置可能连不上外网
1 | netplan apply |
安装Docker docker安装官网
配置软件源
1 | sudo apt-get remove docker \ |
安装k8s (Kubernetes)
1 | apt update && apt install -y apt-transport-https |
配置k8s集群
1 | # 1. Master 配置 |
查看健康值
1 | kubectl get cs |
解决k8s集群在节点运行kubectl出现的错误:The connection to the server localhost:8080 was refused - did you specify the right host or port?
1 | mkdir -p $HOME/.kube |
可能会出现以下错误: Unhealthy Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused
出现这种情况,是/etc/kubernetes/manifests下的kube-controller-manager.yaml和kube-scheduler.yaml设置的默认端口port是 0,在文件中注释掉就可以了
1 | # 注释controller和scheduler的port配置 |
重新配置k8s
1 | # 启用IPVS |
ansible
搭建pod网络(calico) 官方文档
1 | kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml |
k8s 常用命令
1 | # 查看Master状态 |
配置HAPoxy 和 keepalived
该步骤在 k8s-master-01 执行
1 | mkdir -p /usr/local/kubernetes/lb |
创建 Keepalived 启动脚本
该步骤在 k8s-master-01 执行
1 | mkdir -p /usr/local/kubernetes/lb |
复制脚本到其它 Master 地址
分别在 k8s-master-02 和 k8s-master-03 执行创建工作目录命令
1 | mkdir -p /usr/local/kubernetes/lb |
将 k8s-master-01 中的脚本拷贝至其它 Master
1 | scp start-haproxy.sh start-keepalived.sh 192.168.79.131:/usr/local/kubernetes/lb |
分别在几个Master中启动容器
1 | sh /usr/local/kubernetes/lb/start-haproxy.sh && sh /usr/local/kubernetes/lb/start-keepalived.sh |
创建集群cluster
1 | # 创建工作目录 |
集群POD网段冲突问题
1 | # 修改 kubeadm.yml |
修改 custom-resources.yaml
1 | apiVersion: operator.tigera.io/v1 |
安装 calico
1 | kubectl create -f ./custom-resources.yaml |
连接Master节点
1 |
|
其他node连接master
1 | kubeadm join 192.168.79.180:6443 --token abcdef.0123456789abcdef \ |
查看集群状态
1 | kubectl get nodes -o wide |
查看Pod
1 | kubectl -n kube-system get pod -o wide |
查看Service
1 | kubectl -n kube-system get svc |
查看IPVS
查看 kube-proxy 日志,server_others.go:176] Using ipvs Proxier.
1
kubectl -n kube-system logs -f <kube-proxy 容器名>
查看代理规则
1 | ipvsadm -ln |
- 查看生效的配置
1 | kubectl -n kube-system get cm kubeadm-config -oyaml |
- 查看 etcd 集群
1 | kubectl -n kube-system exec etcd-kubernetes-master-01 -- etcdctl \ |
查看VIP漂移
1 | ip a |grep ens33 |
关闭 master 01
1 | kubectl get nodes |
通过资源配置运行容器
部署 Deployment yaml文件
1 | # API 版本号:由 extensions/v1beta1 修改为 apps/v1 |
1 | # 部署 |
服务
1 | # API 版本号 |
1 | # 部署 |
查看效果
- 查看 Pod 列表
1
kubectl get pods
Pod部署错误: ImagePullBackOff
1 | kubectl describe pod nginx-app-7848d4b86f-q6r79 |
- 查看 Deployment 列表
1
kubectl get deployment
- 查看 Service 列表
1
kubectl get service
- 查看 Service 详情
1
kubectl describe service nginx
通过浏览器访问
1 | 通过浏览器访问 http://192.168.79.130:30095/ ,出现 Nginx 欢迎页即表示成功 |
将端口改为 80
1 | apiVersion: v1 |
修改 /etc/kubernetes/manifests/kube-apiserver.yaml
1 | apiVersion: v1 |
集成环境部署
Ingress 统一访问入口
tomcat.yml
1 | # API 版本号:由 extensions/v1beta1 修改为 apps/v1 |
配置Ingress-Nginx
1 |
|
- 本文作者: MISAKIGA
- 本文链接: https://misakiga.github.io/2021/02/12/k8s/ubuntu1804/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
