文章目录

  • 1.多节点k8s二进制部署
    • 1.1部署思路
    • 1.2实验环境
    • 1.3部署master02
    • 1.4部署nginx负载均衡
    • 1.5测试
      • 1.5.1keepalived测试
      • 1.5.2创建pod测试

1.多节点k8s二进制部署

1.1部署思路

1.增加k8s管理节点master02
2.使用nginx负载均衡架构

1.2实验环境

master01:192.168.58.10
master02:192.168.58.60
node1:192.168.58.40
node2:192.168.58.50
nginx1:192.168.58.70
nginx2:192.168.58.80
nginx机器的IP需为部署k8s证书时设置的代理节点1和2的IP
已存在一个单节点的k8s架构,部署可参考以前博客

1.3部署master02

将master01的k8s工作目录、etcd证书、服务启动脚本拷贝给master02

scp -r /k8s/ root@192.168.58.60:/k8s/
scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.58.60:/usr/lib/systemd/system/
##无需增加etcd集群节点,master02无需启动etcd服务,但需要etcd证书文件,用于和etcd通信认证

修改apiserver配置文件中的IP地址

vi /k8s/kubernetes/cfg/kube-apiserver
--bind-address=192.168.58.60 \
--advertise-address=192.168.58.60 \

启动服务

systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler

添加k8s命令到环境变量

echo export PATH=$PATH:/k8s/kubernetes/bin >> /etc/profile
source /etc/profile

查看节点状态

kubectl get node
##两个节点状态为ready,即master02部署成功

1.4部署nginx负载均衡

两台nginx机器安装nginx且修改配置文件,开启四层转发

##这里只显示配置文件需要添加的部分
##由于是四层转发,所以不在http模块内,单独创建stream模块
##若配置文件stream报错,原因是nginx未装stream模块,需在源码目录./configure --with-stream然后重新编译安装make && make install
##日志目录不存在,需手动创建。。8j'm
stream {log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';access_log  /var/log/nginx/k8s-access.log  main;upstream kube-apiserver {server 192.168.58.10:6443;server 192.168.58.60:6443;}server {listen 6443;proxy_pass kube-apiserver;}
}mkdir -p /var/log/nginx/
systemctl restart nginx
netstat -napt | grep nginx
##发现多了一个6443端口的nginx监听进程

两台nginx机器部署keepalived
虚拟IP需设置在部署k8s证书时里面认证的虚拟IP地址

yum -y install keepalived
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalivedvrrp_script check_nginx {                           #定义一个函数check_nginxscript "/usr/local/nginx/sbin/check_nginx.sh"       #函数内容为一个检测nginx服务是否存活的脚本
}global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id nginx_1         #定义该主机在群集中的id,nginx2机器需要命名为不一样的
}vrrp_instance VI_1 {state MASTER              #nginx2节点命名为BACKUPinterface ens33             #修改网卡名,centos7开始为ens33,centos6为eth0virtual_router_id 51priority 105                    #nginx2节点优先级设为95advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {      #设置VIP192.168.58.200}track_script {             #该vrrp实例VI_1调用上面定义的函数check_nginxcheck_nginx}
}

两台nginx创建nginx服务检测脚本并启动keepalived

vi /usr/local/nginx/sbin/check_nginx.sh
count=$(ps -ef |grep nginx |egrep -cv "grep|$$")    #查看nginx进程
if [ "$count" -eq 0 ];then                 #如果nginx进程关闭了,则关闭keepalived服务systemctl stop keepalived
fichmod +x /usr/local/nginx/sbin/check_nginx.sh
systemctl start keepalived

检查虚拟IP

ip addr

nginx1机器上虚拟IP生效,nginx2没有

修改两个k8s-node节点配置文件,指定服务端IP为虚拟IP

vi /k8s/kubernetes/cfg/bootstrap.kubeconfig
server: https://192.168.58.200:6443vi /k8s/kubernetes/cfg/kubelet.kubeconfig
server: https://192.168.58.200:6443vi /k8s/kubernetes/cfg/kube-proxy.kubeconfig
server: https://192.168.58.200:6443systemctl restart kubelet
systemctl restart kube-proxy

在nginx1查看日志
k8s-node成功访问虚拟IP,且负载均衡已生效

1.5测试

1.5.1keepalived测试

nginx1服务器上

pkill nginx
ip addr
##此时虚拟IP已不存在

nginx2服务器上

ip addr

虚拟IP已漂移到nginx2上,keepalived服务正常

恢复
nginx1重启服务,虚拟IP漂移回来

#nginx1
systemctl start nginx
systemctl start keepalived
ip addr

1.5.2创建pod测试

创建nginx的pod

#master节点上
kubectl run nginx --image=nginx
kubectl get pods    #查看pod名,状态,状态需为running,不能为ContainerCreating(容器创建中)

查看服务的pod的日志

kubectl logs nginx-6db489d4b7-7v2fb

报错:

因为使用了system:anonymous(匿名)用户进行操作,没有权限

解决:

kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous
#将集群中的匿名用户绑定到管理员用户,使其拥有权限

再次查看服务的pod的日志

kubectl logs nginx-6db489d4b7-7v2fb

此时可正常查看,但暂时没有日志产生

查看pod完整信息并访问pod

kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP           NODE            NOMINATED NODE   READINESS GATES
nginx-6db489d4b7-7v2fb   1/1     Running   0          8m59s   172.17.0.2   192.168.58.50   <none>           <none>##在启动该pod的node上访问
curl 172.17.0.2

再次查看日志

kubectl logs nginx-6db489d4b7-7v2fb

k8s部署(多节点)相关推荐

  1. K8S部署单节点zookeeper服务

    要使用Kubernetes (K8s) 部署单节点Zookeeper服务,需要执行以下步骤: 0.创建Zookeeper镜像 该镜像包含Zookeeper二进制文件和配置文件,使用Dockerfile ...

  2. k8s ready 不调度_【零基础学云计算】k8s部署---master节点组件部署(三)

    kube-APIserver组件介绍 kube-APIserver提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中 ...

  3. kubernetes (k8s)的二进制部署单节点(etcd和flannel网络)

    文章目录 1 常见的k8s部署方式 2 环境准备 2.1 拓扑 2.2 所有主机关闭防火墙,selinux,swap 2.3 所有主机配置主机名,并再maser上做主机映射 2.4 所有主机将桥接的I ...

  4. K8S——关于K8S控制台的yaml文件编写(基于上一章多节点K8S部署)

    K8S--关于K8S控制台的yaml文件编写(基于上一章多节点K8S部署) 一.yaml文件编写流程 二.证书自签 一.yaml文件编写流程 rbac.yaml---->secret.yaml- ...

  5. K8S——单master节点和基于单master节点的双master节点二进制部署(本机实验,防止卡顿,所以多master就不做3台了)

    K8S--单master节点和基于单master节点的双master节点二进制部署 一.准备 二.ETCD集群 1.master节点 2.node节点 三.Flannel网络部署 四.测试容器间互通 ...

  6. k8s二进制单节点部署

    k8s二进制单节点部署 常见的k8s部署方式 Kubernetes二进制部署(单节点) 环境准备 部署etcd集群(这里就不在单独的服务器上部署,直接部署在各节点上,节省资源) 下载证书制作工具 利用 ...

  7. K8S二进制部署---单节点master

    目录 一.环境准备 二.部署etcd集群 一.环境准备 先准备3台主机,首先搭建Master单节点集群. 因为 Master 是整个 K8S 集群的大脑,没有 Master 接下来的每一步操作都会变得 ...

  8. 啃K8s之快速入门,以及哭吧S(k8s)单节点部署

    啃K8s之快速入门,以及哭吧S(k8s)单节点部署 一:Kubernets概述 1.1:Kubernets是什么? 1.2:Kubernets特性 1.3:Kubernets群集架构与组件 1.3.1 ...

  9. kubeadm部署k8s多master节点的高可用集群

    外部etcd集群部署可参考:https://www.cnblogs.com/zhangmingcheng/p/13625664.html Nginx+Keepalived集群搭建 参考:https:/ ...

  10. 基于VMware采用kubeadm方式部署单节点k8s集群(练习使用)

    1.虚拟机安装centos7.6 1.1 导入镜像 这里选择的版本是:CentOS-7-x86_64-DVD-2207-02.iso(即centos7.6的镜像) 镜像下载地址: http://mir ...

最新文章

  1. [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
  2. 大数据时代,如何构建精准用户画像,直击精细化运营
  3. 虚拟机 克隆:完整克隆 模式
  4. ES索引模板——就是在新建索引时候指定的正则匹配来设置mapping而已,对于自动扩容有用...
  5. 2020-12-14 Python PyCharm新建项目自动添加介绍和utf-8编码
  6. 函数在内存中的具体执行
  7. CH - 0601 Genius ACM(倍增+归并排序)
  8. body curl 设置post_curl 命令详解
  9. spring5(6) ---Ioc和DI
  10. 瑞友天翼提示mysql error_瑞友天翼加载应用程序出错解决方法
  11. 快手测试开发工程师面试
  12. JAVA 对 海康SDK二次开发
  13. matlab 图像处理之拟合圆
  14. 网页删除mysql数据库_网站数据库被删除了
  15. UE4角色受击动画,随机播放音效
  16. stl如果开o2_Flow-3D地形模型处理
  17. Python和C语言哪个更容易学,感觉学了C语言有点难,只学过C语言的大学生很迷茫?
  18. JZOJ.4377[GDOI2016模拟3.10]习用之语 解题报告
  19. OpenGL 图形库的使用(二十五)—— 高级OpenGL之帧缓冲Framebuffers
  20. 日语50音图学习笔记

热门文章

  1. 打造自己个性的notepad ++
  2. 使用vw、vh的使用教程
  3. 此nvidia驱动程序与此windows版本不兼容,此图形的驱动程序无法找到兼容的驱动硬件
  4. macOS中快速打开终端
  5. 抠图应用程序设计(一)——GrabCut算法的实现
  6. 抖音账号如何做好私域流量,私域流量是什么
  7. SpringCloud相关jar maven管理工具不能下载(Finchley.M8)
  8. web总体复习 h5c3
  9. 字符集、ASCII、Unicode
  10. 硬盘分区显示空间大小比实际值小的解决办法,如何给硬盘精确分区