Kubernetes部署elasticsearch-head
在之前已经部署好了elasticsearch集群了,下面开始部署es-head。es-head是一个nodejs项目,所以我们使用deployment部署就可以了。
在之前的configmap中我们已经加入了 http.cors.enabled: true 和 http.cors.allow-origin: “*”,处理跨域拒绝访问问题
创建deploymentapiVersion: apps/v1kind: Deploymentmetadata: name: es-head namespace: log-systemspec: replicas: 2 selector: matchLabels: app: es-head template: metadata: labels: app: es-head spec: containers: - name: es-head image: mobz/elasticsearch-head:5 ima ...
Kubernetes部署ElasticSearch集群
ElasticSearch跟MySQL类似,都需要使用StatefulSet去部署这类有状态服务
es配置中常见的参数:
cluster.name:集群名称,确保同一集群中的节点此配置名称相同
node.name:节点名称,表示集群中节点名称
network.host:es监听的IP地址
discovery.seed_hosts:节点发现地址,配置成域名(域名下解析到多个IP地址),那么es将处理所有发现的IP地址
cluster.initial_master_nodes:集群内所有的node.name
部署NFS storageclass参考文章:https://1335402049.github.io/2020/09/16/Kubernetes%E4%B8%AD%E4%BD%BF%E7%94%A8NFS%E7%9A%84StorageClass/
创建namespaceapiVersion: v1kind: Namespacemetadata: name: log-system labels: name: log-system
创建configmapapiVersi ...
Vagrant环境下部署Kubernetes集群
环境准备
安装VirtualBox
安装Vagrant
准备CentOS7的vagrant box
创建虚拟机
打开cmd窗口,在一个新建的目录下执行下面操作
添加box
vagrant box add centos7 D:\vagrantbox\CentOS-7.box
初始化box,生成Vagrantfile
vagrant init
将生成的Vagrantfile清空,复制下面内容进去
需要注意下面三个ip,需要根据自己内网ip决定,通过ipconfig查看自己的内网ip网段
Vagrant.configure("2") do |config| config.vm.define "k8s-01" do |master| master.vm.box = "centos7" master.vm.provider "virtualbox" do |vb| vb.memory = "4096" vb.cpus = ...
Vagrant快照备份与恢复
Vagrant快照插件安装vagrant plugin install vagrant-vbox-snapshot
快照管理
下文中 k8s-01 指的是vagrant创建的虚拟机,也就是vagrantfile中config.vm.define定义的
创建快照vagrant snapshot take k8s-01 "centos-init"
查看快照vagrant snapshot list k8s-01
恢复指定节点的快照vagrant snapshot go k8s-01 "centos-init"
删除一个快照vagrant snapshot delete k8s-01 "centos-init"
Vagrant调整磁盘大小
安装插件vagrant plugin install vagrant-disksize
修改vagrantfile通过 master.disksize.size node1.disksize.size node2.disksize.size 调整三台虚拟机磁盘大小
Vagrant.configure("2") do |config| config.vm.define "k8s-01" do |master| master.vm.box = "centos7" master.vm.provider "virtualbox" do |vb| vb.memory = "4096" vb.cpus = 2 end master.vm.network "public_network", ip: "192.168.1.110" master.ssh.insert_key ...
Vagrant调整CPU和内存
修改vagrantfile通过 vb.memory vb.cpus 调整三台虚拟机cpu和内存
Vagrant.configure("2") do |config| config.vm.define "k8s-01" do |master| master.vm.box = "centos7" master.vm.provider "virtualbox" do |vb| vb.memory = "4096" vb.cpus = 2 end master.vm.network "public_network", ip: "192.168.1.110" master.ssh.insert_key = false master.vm.hostname = "master" end config.vm.define &quo ...
ReplicationController、ReplicaSet和Deployment关联
ReplicationController、ReplicaSet和Deployment都是Kubernetes中Pod的控制器
ReplicationController和ReplicaSetRC(ReplicationController)主要是用来确保容器应用的副本数始终保持在用户定义的副本数,也就是说容器异常退出,RC会自动创建新的Pod来替代。官方建议使用RS(ReplicaSet)来取代RC
RS(ReplicaSet)跟RC没有本质的区别,只是RS支持集合式的selector
应用 nginx.yaml
我们定义了3个副本的RS控制器的nginx Pod,具有app=nginx的标签
apiVersion: apps/v1kind: ReplicaSetmetadata: name: nginxspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: con ...
Kubernetes使用ipvs代替iptables
kubernetes1.8版本开始,kube-proxy引入了ipvs模式,kube-proxy监控pod的变化并创建ipvs rules,ipvs与iptables类似,也是在kernel下通过netfilter实现的,但是采用hash表存储规则,在规则多的情况下,hash表查询速率的优势就会显现出来。
开启内核参数cat >> /etc/sysctl.d/k8s.conf << EOFnet.ipv4.ip_forward = 1net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1EOF# 是配置生效sysctl -p
安装ipvsyum install -y ipvsadm ipset# 临时生效modprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrac ...
Kubeadm join流程
在kubeadm init过程中,会生成bootstrap token,node节点可以安装kubelet和kubeadm,执行kubeadm join加入到这个集群。
首先一开始,node上的kubeadm会发起一次“不安全模式”访问kube-apiserver,从而拿到保存在etcd中的cluster-info,也就是我们在kubeadm中最后说到的configmap,cluster-info保存着ca.crt等master的重要数据,而bootstrap token则扮演这个过程中的安全验证角色。node上的kubelet只要拿到cluster-info数据,那么之后就可以以“安全模式”连接到apiserver上去,这样一个新的节点就加入到了集群。
那么我们上面谈到node通过kubeadm join加入集群,在执行join命令时,首先会对当前node环境进行检查,然后会携带2个重要的参数discover-token-ca-cert-hash和token,进行身份验证
discover-token-ca-cert-hash用于node验证master身份,保证当前node joi ...
Kubeadm init流程
1.引导前检查(pre-flight checks)kubeadm init执行之后,首先会进行pre-flight checks检查,确保master节点可以满足master组件可以安装的所有条件
error级别的检查:
kubeadm版本要与kubernetes版本的对比检查,kubeadm版本不小于kubernetes版本
kubernetes安装的系统需求检查,内核版本需大于3.10以上,4.x以上,是否设置了cgroups子系统,后端服务是否正常工作
其他检查:用户、主机、端口、swap、工具等
2.生成私钥和数字证书kubeadm会为整个集群生成多组私钥和数字证书,如果不指定外部的证书授权机构,kubeadm init会自建证书授权机构,并生成ca的私钥(ca.key)、自签署的公钥数字证书(ca.crt),用于签发后续kubernetes需要的其他公钥证书
kubeadm init生成的证书都在/etc/kubernetes/pki目录下
自建CA如果不指定外部的证书授权机构,kubeadm init会自建证书授权机构,并生成ca的私钥(ca.key)、自签 ...