由图中可以看出,Etcd是kube-apiserver用于存储的一个集群。 -trusted-ca-file=/opt/kubernetes/ssl/ca.pem --peer-trusted-ca-file=/opt/kubernetes/ssl/ca.pem 测试Etcd集群
对于这类服务的部署,需要解决两个大的问题:一个是状态保存,另一个是集群管理 (多服务实例管理)。kubernetes中提的StatefulSet方便了有状态集群服务在上的部署和管理。 通常来说,通过下面三个手段来实现有状态集群服务的部署: 通过Init Container来做集群的初始化工 作。 通过Headless Service来维持集群成员的稳定关系。 因此,在K8S集群里面部署类似kafka、zookeeper这种有状态的服务,不能使用Deployment,必须使用StatefulSet来部署,有状态简单来说就是需要持久化数据,比如日志、数据库数据、 的Cluster Domain集群根域 二、部署过程记录(NAS存储) 这里使用K8S搭建一个三节点的kafka容器集群,因为kafka集群需要用到存储,所以需要准备持久卷(Persistent Volume 创建ZK集群 [root@k8s-master01 zk]# pwd /opt/k8s/k8s_project/kafka_zk/zk [root@k8s-master01 zk]# ls zk-nfs-class.yaml
-pod-network-cidr=10.244.0.0/16 \ --ignore-preflight-errors=all 解释 --apiserver-advertise-address 集群通告地址 集群内部虚拟网络,Pod统一访问入口 --pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致 --ignore-preflight-errors=all 忽略错误 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令 kubeadm join192.168.4.10:6443 --token oweerb.nonsh3zl5a8no0od 19s v1.20.0 testk8s-node2 NotReady <none> 16s v1.20.0 9、部署容器网络(CNI) Calico 创建service account并绑定默认cluster-admin管理员集群角色: 创建用户 kubectl create serviceaccount dashboard-admin -n kube-system
K8S 部署方式有很多,有的方式不太友好,需要注意很多关键点,有的方式对小白比较友好,部署简单方便且高效 二进制源码包的部署方式 使用 二进制源码包的方式部署会比较麻烦,大概分为如下几步: 获取源码包 woker 节点上 kubelet,kube-proxy,docker 在 K8S 中,各个组件之间互相访问都是建议通过证书进行访问的,所以我们也需要生成相应的证书 生成证书 例如 HTTP 的,HTTPS 的 涉及的组件和工具比较多,我们可以后续对 K8S 比较熟之后,再来尝试源码包的方式 使用 kubeadm 方式部署 官方是推荐使用 minikube 来部署,其实他也是通过 kubeadm 来部署的 ,使用 kubeadm 的部署方式就相对简单,不过步骤也是不少,有: 需要安装 kube 对应的软件,kubelet,kubeadm,kubectl 初始化整个 K8S 集群 添加节点到集群中 执行上述 3 步,我们就可以将 K8S 集群搭建部署起来 生成证书是自动的,不需要我们去干预 master 节点是用来管理集群容器的,所有的容器都是运行在 master 节点中,worker 节点是用来执行任务的
前言 本次的目的是通过使用k8s搭建一个三节点的zookeeper集群,因为zookeeper集群需要用到存储,所以我们需要准备三个持久卷(Persistent Volume) 简称就是PV。 创建zk-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: k8s-pv-zk01 namespace: tools image-20200726131248218 创建ZK集群 我们选择使用statefulset去部署zk集群的三节点,并且使用刚刚创建的pv作为存储设备。 ReadWriteOnce" ] resources: requests: storage: 1Gi 使用kubectl apply -f zk.yaml部署 image-20200726132634789 两个follower节点一个leader 代表我们zk集群部署成功!!!
] 172.16.87.100 172.16.87.101 172.16.87.102 [k8s_master] 172.16.87.100 [k8s_node] 172.16.87.101 172.16.87.102 kubernetes/yum/doc/rpm-package-key.gpg EOF #更新缓存 yum clean all -y && yum makecache -y && yum repolist -y # 部署镜像 /kube-proxy:v1.16.2 k8s.gcr.io/kube-proxy:v1.16.2 docker tag bluersw/pause:3.1 k8s.gcr.io/pause:3.1 docker tag bluersw/etcd:3.3.15-0 k8s.gcr.io/etcd:3.3.15-0 docker tag bluersw/coredns:1.6.2 k8s.gcr.io/coredns cd53a381768b059f822f4d85f21041c73bf9c67e5b4f61eafbdfe6abb9ac65cb Token:需要到Master查看Ansible返回的执行信息 验证集群
前言 本次的目的是通过使用k8s搭建一个三节点的kafka集群,因为kafka集群需要用到存储,所以我们需要准备三个持久卷(Persistent Volume) 简称就是PV。 image-20200726131248218 创建Kafka集群 我们选择使用statefulset去部署kafka集群的三节点,并且使用刚刚创建的pv作为存储设备。 ReadWriteOnce" ] resources: requests: storage: 10Gi 使用kubectl apply -f kafka.yaml部署 验证Kafka集群是否启动成功 我们可以通过kubectl exec -it kafka-1 -n tools /bin/bash 进入容器 ? image-20200726134446855 创建topic成功 代表我们kafka集群部署成功!!!
这次ES8集群部署花的时间真不少,还熬了两夜,原本是比较简单的,同事搞就可以了,结果还是超出了预期,不熟悉的东西部署也是相当耗时间的。 -1-0%e9%9b%86%e7%be%a4%e6%90%ad%e5%bb%ba/,改为直接使用安装包进行部署,在测试机上尝试是可以把几个节点服务连接成一个集群的。 像这类需要部署成集群的,还是使用原生部署比较好,之前部署doris的经历也是类似,开始使用docker部署,各种踩坑,后来还是改用原生进行部署,才成功了。 以下是熬了两天的成果: 部署4个节点的ES8集群: 节点 IP http.port transport.port node-1 ip1 9200 9300 node-2 ip2 9200 9300 node 检查集群是否健康 在任意节点上执行的效果应该都类似的: curl -u "elastic:fHNY2y8x78CqGNBSKqRp" -XGET "ip:9200/ _cluster/health"
1、环境介绍 1.1、kubernetes集群环境 1.2、存储环境 1.3、nexus版本 2、部署nexus 3、访问检查 Nexus是一个强大的Maven仓库管理器,通过 nexus 可以搭建 1、环境介绍 1.1、kubernetes集群环境 # kubectl version Client Version: version.Info{Major:"1", Minor:"15", GitVersion 133d v1.15.0 k8s-node-04 Ready node 198d v1.15.0 1.2、存储环境 本集群中kubernetes k8s集群中的资源清单,通过nfs的storageclass来动态提供pv,将nexus的数据做持久化存储,并且以NodePort方式暴露服务。 至此,在k8s中部署nexus完成,使用文章后续会发布
1、部署k8s的两种方式: 目前生产部署Kubernetes集群主要有两种方式: kubeadm Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署 二进制包 从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。 本实验采用kubeadm的方式搭建集群。 --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问 --kubernetes-version K8s版本,与上面安装的一致 --service-cidr 集群内部虚拟网络 5、配置k8s的node节点【node节点操作】 5.1、向集群添加新节点,执行在kubeadm init输出的kubeadm join命令 图片 图片 图片 默认token有效期为24小时,当过期之后 这时就需要重新创建token,可以直接使用命令快捷生成: kubeadm token create --print-join-command 6、部署 CNI 网络插件 在上述操作完成后,各个工作节点已经加入了集群
1、环境介绍 1.1、kubernetes集群环境 [root@k8s-master-01 ~]# kubectl version Client Version: version.Info{Major: v1.16.3 k8s-node-03 Ready <none> 5d4h v1.16.3 1.2、存储环境 本集群中kubernetes底层存储使用的是glusterfs, 2.1、部署PostgreSQL 在k8s集群部署PostgreSQL,需要将数据库的数据文件持久化,因此需要创建对应的pv,本次安装通过storageclass创建pv。 get pods|grep postgres postgres-sonar-75d7f8d99-sxdnn 1/1 Running 0 136m 2.2、部署SonarQube 与常规部署不同的是,这里对sonar通过init container进行了初始化,执行修改了容器的vm.max_map_count大小。
集群还未拉起,故这里的kubelet是无法启动的,等master初始化时会自动拉起 ██ 部署 k8s master kubeadm init \ --apiserver-advertise-address scp node5:/etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config ██ 部署 v1.18.0 node6 NotReady <none> 6m55s v1.18.0 node7 NotReady <none> 42s v1.18.0 ██ 部署网络插件 to recognize "calico.yaml": no matches for kind "PodDisruptionBudget" in version "policy/v1" 可见网络插件无法部署 应用成功后,可以看到CNI POD正在初始化中,静待拉起~~~ calico running 状态后,查看节点已全部 Ready ██ 以下是node6的操作日志,可以看到网络插件部署、初始化、成功的全过程
集群的 kubelet: 安装 在集群所有节点上,用于启动 Pod 的 kubectl:通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件 kubeadm初始化k8s集群 配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s 集群进行管理 [root@master ~]# mkdir -p $HOME/ admin.conf $HOME/.kube/config [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config 进入slave节点执行添加到集群 v1.20.6 slave01-tz NotReady <none> 12s v1.20.6 此时集群状态还是NotReady 状态,因为 没有安装网络 若要扩充集群(master节点) master执行 kubeadm token create --print-join-command 结果在新增节点执行 安装k8s网络组件Calico(master节点
一、k8s基本操作命令: 创建:kubectl create -f xxx.yaml 查询: kubectl get pod yourPodName kubectl describe pod yourPodName name: pod-redis labels: name: redis spec: restartPolicy: Always #表明该容器一直运行,默认k8s #specification of the resource content 指定该资源的内容 restartPolicy: Always #表明该容器一直运行,默认k8s namespace中必须唯一 labels: #设定资源的标签,详情请见http://blog.csdn.net/liyingke112/article/details/77482384 k8s-app 自定义注解名字 spec:#specification of the resource content 指定该资源的内容 restartPolicy: Always #表明该容器一直运行,默认k8s
MULTICAST> mtu 1450 inet 172.17.27.0 netmask 255.255.255.255 broadcast 0.0.0.0 ether 8a MULTICAST> mtu 1450 inet 172.17.27.0 netmask 255.255.255.255 broadcast 0.0.0.0 ether 8a /subnets/172.17.27.0-24 {"PublicIP":"172.18.98.46","BackendType":"vxlan","BackendData":{"VtepMAC":"8a
/argocd-application-controller created role.rbac.authorization.k8s.io/argocd-dex-server created role.rbac.authorization.k8s.io argocd-repo-server-5fb9cbb945-k594b 0/1 ContainerCreating 0 10s pod/argocd-server-8d8cb6488 argocd-repo-server-5fb9cbb945 1 1 0 10s replicaset.apps/argocd-server-8d8cb6488 argocd-repo-server-5fb9cbb945-k594b 1/1 Running 0 13h pod/argocd-server-8d8cb6488 argocd-repo-server-5fb9cbb945 1 1 1 13h replicaset.apps/argocd-server-8d8cb6488
1、版本说明 因为考虑到较早版本rabbitmq在k8s上的集群部署是使用autocluster插件去调用kubernetes apiserver来获取rabbitmq服务的endpoints,进而获取 ),这里选择StatefulSet与Headless Service模式部署有状态的RabbitMQ集群。 -xvm8r 1/1 Running 0 17s 4、部署RabbitMQ基于镜像模式的集群 [root@k8s-master01 rabbitmq]# ll total ]# 采用StatefulSet与Headless Service模式部署有状态的RabbitMQ集群。 推荐方式:给客户端提供一个统一的透明的集群连接地址 做法:在前面部署LVS或Haproxy,通过四层负载均衡代理后RabbitMQ的三个node节点的5672端口。
k8s以StatefulSet方式部署kafka集群: kafka-namespace.yaml apiVersion: v1 kind: Namespace metadata: name: kafka 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 可以看到,zookeeper集群状态正常 ,zk-1 是 leader ,在 zk-0 创建的数据在集群中所有的服务上都是可用的。 0:/$ kafka-console-consumer.sh --topic test --bootstrap-server localhost:9092 kafka消息的生产和消费正常,kafka集群正常 k8s部署kafka集群完成。
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md
177uMc5KQsrNVQ 42m kubelet-bootstrap Approved,Issued node-csr-e1wUzGmd2huMv0aTfH35rZtm47opoOd8pcjZjUmZdnw 20 18:03 kube-proxy -rw------- 1 root root 6294 Feb 20 14:41 kube-proxy.kubeconfig 再回到master节点上,查看集群信息 Healthy {"health": "true"} etcd-1 Healthy {"health": "true"} 现在master以及node全部就绪了,整个集群部署完成