❶ k8s配置ingress
转自 https://www.cnblogs.com/tchua/p/11174386.html
Ingress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为quay.io。
官方地址: https://github.com/kubernetes/ingress-nginx
Ingress Contronler 通过与 Kubernetes API 交互,动态的去感知集群中 Ingress 规则变化,然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段 Nginx 配置,再写到 Nginx-ingress-control的 Pod 里,这个 Ingress Contronler 的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中,然后 reload 一下 使用配置生效。以此来达到域名分配置及动态更新的问题。
192.168.3.100 www.tchua.top
然后主机浏览器访问 http://www.tchua.top:31199 ,这里访问时需要加上svc映射到主机时随机产生的nodePort端口号。
上面我们只是解决了集群对外提供服务的功能,并没有对ingress进行高可用的部署,Ingress高可用,我们可以通过修改deployment的副本数来实现高可用,但是由于ingress承载着整个集群流量的接入,所以生产环境中,建议把ingress通过DaemonSet的方式部署集群中,而且该节点打上污点不允许业务pod进行调度,以避免业务应用与Ingress服务发生资源争抢。然后通过SLB把ingress节点主机添为后端服务器,进行流量转发。
修改参数如下:
这里我在2台master节点部署(生产环境不要使用master节点,应该部署在独立的节点上),因为我们采用DaemonSet的方式,所以我们需要对2个节点打标签以及容忍度。
这里直接使用上面创建的pod及对应svc测试即可,另外注意一点,因为我们创建的ingress-controller采用的时hostnetwork模式,所以无需在创建ingress-svc服务来把端口映射到节点主机上。
在win主机上直接解析,IP地址为k8s-master03/k8s-master02 任意节点ip即可,访问的时候也无需再加端口
备用镜像
❷ Kubernetes(K8S)入门与安装配置
Kubernetes是一个跨主机集群的开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作,提供以容器为中心的基础架构。谷歌旗下开源软件,江湖人称K8S。
上图是一个通过K8S搭建的集群环境,采用三台物理机搭建(三台机器是K8S搭建集群的最低要求),我先简单介绍一下几个重点名词。
Centos7Master*1(注意必须是双核以上的CPU,否则无法初始化K8S)
Centos7Node*2
将文件上传至该目录
网盘地址:https://pan..com/s/1NiAdf0Gp24qjVx2v_HqqyQ
提取码:aew7
执行以下命令
如果不是groupfs,执行下列语句
将最后一行注释
运行dockerimages可以看到以下几个关键应用
kube-proxy容器间通讯代理、kube-apiserverAPI服务端、kube-scheler任务调度器、kube-controller-manager集群控制器、corednsK8S内置的DNS服务器、etcd用于保存集群所有的网络配置和对象的状态信息、pause前面已经提到用于容器间的通讯以及数据卷的挂载。至此K8S安装完成
图中的第一个红框的命令是需要管理员手动复制,然后在master服务器上执行的。
PS:admin.conf是kubeadm集群管理的核心配置文件,包含整个集群各个节点的授权信息,以及本身的一些配置信息
第二个红框中的命令是在node节点上执行,里面包含了一个加入集群的token认证信息以及ca证书的hashcode。通过该token可以加入K8S集群.
从图中看到master节点处于NotReady状态,说明节点中存在有问题的Pod,查看存在问题的pod,执行以下命令查看所有Pod状态
如果某个Pod的STATUS处于CrashLoopBackOff状态表示创建失败了,那么它会不断自动重新创建。上图中两个coredns处于pending状态,原因是我们没有配置K8S网络通讯协议fannel,从上传的文件中加载并创建flannel网络组件
3.在node节点上执行刚刚由kubeadm生成的节点加入命令
如果出现反复无法加入节点的情况,运行kubeadmreset这条命令还原当前节点上kubeadminit或者kubeadmjoin所做的所有更改。当想加入新节点忘记token时可以使用kubeadmtokenlist查看token,或者kubeadmtokencreate创建token,采用跳过ca安全认证的方式加入节点。
4.三台机器设置kubelet开机自启,至此通过kubeadm集群配置完成
在主节点上执行以下命令,以下三个配件都是已经配置好的,装载即可。
图中dashboard服务已经被创建,配置文件中关闭了密码验证,只需要浏览器打开http://192.168.220.131:32000无需登录。
❸ Rocketmq的k8s配置(1nameservice + 1brocker)
RockerMQ在k8s的部署有两种方式, 一种是使用operator 在k8s集群中部署,可参考 operation项目 ; 一种是编写简单的k8s配置文件,在rocketmq的docker项目中有提供模板。
这里我们希望使用单机版k8s部署一套低配置rockerMQ, 仅启动一个nameservice和1个broker,我们将使用 rocketmq-docker项目 提供的模板来完成。
apiVersion: apps/v1
kind: Deployment
metadata:
name: rocketmq
spec:
replicas: 1
selector:
matchLabels:
app: rocketmq
template:
metadata:
labels:
app: rocketmq
spec:
containers:
- name: broker
image: apacherocketmq/rocketmq:4.6.0
command: ["sh","mqbroker", "-n","localhost:9876"]
imagePullPolicy: IfNotPresent
ports:
- containerPort: 10909
- containerPort: 10911
env:
- name: JAVA_OPT
value: -server -XX:ParallelGCThreads=1
volumeMounts:
- mountPath: /home/rocketmq/logs
name: brokeroptlogs
- mountPath: /home/rocketmq/store
name: brokeroptstore
- name: namesrv
image: apacherocketmq/rocketmq:4.6.0
command: ["sh","mqnamesrv"]
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9876
volumeMounts:
- mountPath: /home/rocketmq/logs
name: namesrvoptlogs
volumes:
- name: brokeroptlogs
emptyDir: {}
- name: brokeroptstore
emptyDir: {}
- name: namesrvoptlogs
emptyDir: {}
- name: namesrvoptstore
emptyDir: {}
apiVersion: v1
kind: Service
metadata:
name: rocketmqservice
spec:
type: NodePort
ports:
- name: namesrv
port: 9876
targetPort: 9876
nodePort: 32000
selector:
app: rocketmq
notes: 签名异常问题
Caused by: org.apache.rocketmq.acl.common.AclException: [10015:signature-failed] unable to calculate a request signature. error=Algorithm HmacSHA1 not available
手动方案I,在tool.sh 中${JAVA_HOME}/jre/lib/ext后加上ext文件夹的绝对路径(jdk路径)
最终方案: 手动的方式,很不方便,经过检查,实际问题是由于路径上的${JAVA_HOME}变量为空,导致无法找到etx路径。所以,我们通过k8s的方式传入JAVA_HOME环境便令就可以了。如下图:
3.2 添加订阅组
订阅组 可以用来实现消费的loadbalance,同一订阅组的消费者分享所有的读队列。
创建订阅组使用updateSubGroup 命令,所需参数如下:
执行命令新建一个授权服务的消费组
./mqadmin updateSubGroup -b localhost:10911 -n localhost:9876 -g GID_authorize
执行结果:
❹ Kubernetes(k8s)配置管理ConfigMap&Secret
1)查看帮助:
2)通过文件夹创建:
3)通过文件创建:
4)通过文件创建(另起别名)
5)通过环境变量创建
6)通过配置文件创建
1)创建deployment资源文件
2)定义环境变量configmap
1)envFrom定义
1)创建Secret私有仓库:
docker-registry:指定Secret的类型
myregistrykey: Secret名称
DOCKER_REGISTRY_SERVER:镜像仓库地址
DOCKER_USER:镜像仓库用户名,需要有拉取镜像的权限
DOCKER_PASSWORD:镜像仓库密码
DOCKER_EMAIL:邮箱信息,可以为空
2)使用Secret私有仓库:
1)生成证书
2)ingress中使用证书
❺ k8s Nginx Ingress 常用的 9个 配置(annotation)
上一篇文章介绍了 ingress vhost这个annotation的使用,趁热打铁我们一口气介绍 9 个常用的annotation。 如果一个k8s 集群里面部署多个ingress controller的时候,如果配置ingress 希望指定到某个ingress controller的时候,ingress claas就发挥巨大作用了。 一方面在controller启动的时候需要通过参数指定ingress class 另一方面,在创建ingress的时候,通过annotation指定ingress class,如下所示 nginx.ingress.kubernetes.io/force-ssl-redirect: "true"通过这个annotation可以强制 https,如果是http请求,会通过 301 redirect到 https。 nginx.org/proxy-connect-timeout 和nginx.org/proxy-read-timeout 这两个参数分别设置nginx的建立连接以及等待结果的超时时间。 我们经常将nginx作为api的网关,支持跨域必不可少。通过nginx.ingress.kubernetes.io/cors-allow-methods 设置支持跨域请求的方法。 限流也经常使用,通过 rps 限制每秒请求数,rpm 限制每分钟请求数,connections限制连接数。 这个主要是针对外部请求,防止将流量打满,proxy-body-size 设置最大请求 body,如果超过则会返回 413 请求错误。 这个主要是用于安全限制,只允许特定的客户端请求,但由于现在网络中NAT的广泛应用,这个参数使用的场景比较有限。 这个经常使用,当客户端请求一个不存在的path的时候,我们不希望返回 404 ,跳转到一个默认的服务上。 nginx ingress 默认是开启access log的,如果你想关闭,可以通过将 nginx.ingress.kubernetes.io/enable-access-log 设置成false。❻ mybatis通过windows方式连接sqlserver数据库配置文件怎么写
不验证用户名密码的登录方式可以在JDBC串里实现,但也要依托某种验证方式,例如下面这个使用k8s验证的连接串的写法:
jdbc:sqlserver://;servername=server_name;integratedSecurity=true;authenticationScheme=JavaKerberos
把配置文件里原有的dataSource里面的url改了
<property name="url" value="jdbc:sqlserver://;servername=server_name;integratedSecurity=true;authenticationScheme=JavaKerberos"/>
❼ k8s 内部dns配置说明
https://support.huaweicloud.com/usermanual-cce/cce_01_0133.html
https://www.jianshu.com/p/dbc063e190c9
None 无任何策略
Default 默认
ClusterFirst 集群 DNS 优先
ClusterFirstWithHostNet 集群 DNS 优先,并伴随着使用宿主机网络
nameserver:容器解析域名时查询的DNS服务器的IP地址列表。如果设置为10.247.x.x说明DNS对接到Kube-DNS/CoreDNS,如果是其他IP地址,则表示采用华为云DNS或者用户自建的DNS。
search:定义域名的搜索域列表,当访问的域名不能被DNS解析时,会把该域名与搜索域列表中的域依次进行组合,并重新向DNS发起请求,直到域名被正确解析或者尝试完搜索域列表为止。对于CCE集群来说,容器的搜索域列表配置3个域,当解析一个不存在的域名时,会产生8次DNS查询,因为对于每个域名需要查询两次,分别是IPv4和IPv6。
options:定义域名解析配置文件的其他选项,常见的有timeout、attempts和ndots等等。Kubernetes集群容器的域名解析文件设置为options ndots:5,该参数的含义是当域名的“.”个数小于ndots的值,会先把域名与search搜索域列表进行组合后进行DNS查询,如果均没有被正确解析,再以域名本身去进行DNS查询。当域名的“.”个数大于或者等于ndots的值,会先对域名本身进行DNS查询,如果没有被正确解析,再把域名与search搜索域列表依次进行组合后进行DNS查询。如查询 www.huaweicloud.com 域名时,由于该域名的“.”个数为2,小于ndots的值,所以DNS查询请求的顺序依次为: www.huaweicloud.default.svc.cluster.local 、 www.huaweicloud.com.svc.cluster.local 、 www.huaweicloud.com.cluster.local 和 www.huaweicloud.com ,需要发起至少7次DNS查询请求才能解析出该域名的IP。可以看出,这种配置在访问外部域名时,存在大量冗余的DNS查询,存在优化点。
❽ Spark on k8s: 配置和使用ConfigMap
顾名思义,用来存配置的Map,可以存单个配置或者配置文件,在 POD 中我们可以通过环境变量来访问单个配置和配置文件,后者一般会被 mount 到 Pod 的一个 Volume 上,这样我们在跑 Spark on k8s 的时候,可以将一些配置放在 ConfigMap 中,和容器镜像解耦。
如果使用 Spark 社区默认的 spark-submit 的提交方式,在 Spark 3.0 之后(当然目前还没有release),支持以下类型的 ConfigMap。
这些是用户可以配置的,在 Spark on k8s 的内部运行实现上,也用了一些 ConfigMap 特性带来的便利,可以通过 describe 命令查看下 Driver Pod 的描述,
比如 spark-conf-volume 这个,就存放了客户端汇总的所有 spark 相关的配置,默认被 mount 到 /opt/spark/conf/spark.properties 这个位置,然后在 Driver Pod 启动时,通过 --properties-file 参数指定,也可以通过 describe 命令,我们也可以查看这个 map 的内容
使用 ConfigMap 之前必须先创建,我们可以通过 kubectl create configmap --help 了解这个命令的用法。
ConfigMap 和命名空间是绑定的,创建在对应的命名空间内,后面跑 spark 的时候才能使用。
我们以 spark.kubernetes.hadoop.configMapName 来举例,我们用来创建ConfigMap 来存储 HADOOP_CONF_DIR 下的文件。
可以通过上面两种方式,直接使用路径 或者 一个文件一个文件来指定
通过 describe 命令可以查看该 ConfigMap 信息。
ConfigMap 的 数据部分,key值对应的是文件的名字,Value对应的是该文件的实际内容。
创建完成后,我们就可以通过将它的名称,如hz10-hadoop-dir,直接设置给 spark.kubernetes.hadoop.configMapName 就可以使用啦
❾ 请问公司起步建立k8s,需要什么样的服务器配置,多少台服务器每台怎样的配置要求
服务器按自己预算买就行,vCenter HA cluster 的建议是最少三台服务器。这样可以实现一个host维护或有问题的时候另一台马上能补上。k8s就在vcenter里用vm实现。 ⌄这样的好处是以后有需求的话可以随意增加服务器到vcenter里扩展cpu或者存储能力。
蓝海大脑水冷工作站具有高性能,高密度、扩展性强等特点。液冷GPU服务器产品支持1~20块 GPU卡,还可以选择。芯片主要采用龙芯、飞腾、申威、海光、英伟达、Intel、AMD。完全定制啊,敲开心。适配多个存储卡,适用于深度学习训练及推理、生命科学、医药研发、虚拟仿真等场景,覆盖服务器、静音工作站、数据中心等多种产品形态,量身定制,满足客户全场景需求。