k8s学习笔记
一、使用configmap、pv、hostpath方式挂载外部文件不覆盖原镜像系统目录下的文件示例:推荐写法:定义一个volumesvolumes:name: visual-query-configmap configMap:name: visual-query-configmap#name配置必须与configmap名称一样定义容器挂载点volumeMountsvolumeMo......
一、使用configmap、pv、hostpath方式挂载外部文件不覆盖原镜像系统目录下的文件
示例
推荐写法:定义一个volumes
volumes:
name: visual-query-configmap
configMap:
name: visual-query-configmap #name配置必须与configmap名称一样
定义容器挂载点volumeMounts
volumeMounts:
name: visual-query-configmap #configmap名称
mountPath: /app/config/application.properties #容器挂载路径
subPath: application.properties #挂载文件名
定义一个volumes
volumes:
name: nginx-configmap
configMap:
name: nginx-configmap
items:
key: nginx.conf
path: etc/nginx/nginx.conf
定义容器挂载点volumeMounts
volumeMounts:
name: nginx-configmap
mountPath: /etc/nginx/nginx.conf
subPath: etc/nginx/nginx.conf
二、helm 将应用配置文件放在chart目录内通过编写templates下的configmap.yaml动态将目录中的配置文件渲染为configmap。最终打包为chart
示例:
templates/configmap.yaml文件
apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: null
name: helm-stella-service-configmap
data:
{{ (.Files.Glob "stella-conf/").AsConfig | indent 2 }} #使用模板集成函数.Files.Glob,stella-conf/ 为指定目录,路径为chart目录下并非linux系统绝对路径
三、k8s yaml 修改pod hosts文件
spec:
hostAliases:
ip: "192.168.10.181"
hostnames:
"cdh6-krb5.senses-ai.com"
"cdh6kdc"
四、yaml 设置以hostNetwork模式启动
spec:
selector:
matchLabels:
app: livy-krb-cdh6
template:
metadata:
labels:
app: livy-krb-cdh6
spec:
hostNetwork: true #使用宿主机网络模式,默认不配置为false,当为true时候必须指定端口.
五、删除一直处于Terminating的状态的namespace
1.导出namespace资源定义
kubectl get ns ${namespace-name} -o json > tmp.json
2.编辑tmp.json资源定义文件,然后删除其中的 spec 字段(因为其中会包括 finalizers 字段)一并删掉。
3.创建代理服务器
kubectl proxy
4.curl 调用删除 ns
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/${namespace-name}/finalize
六、helm chart定义容器中多个env
1.deployment.yaml中定义
env:
{{- range $key, $value := .Values.env }}
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
2.values.yaml 传入key 和value
env:
HADOOP_CONF_DIR: "/opt/hadoop/etc/hadoop"
HADOOP_HOME: "/opt/hadoop"
KERBEROS_ENABLED: "true"
KERBEROS_KEYTAB: "/opt/tw.keytab"
KERBEROS_PRINCIPAL: "tw@CDH6.COM"
TZ: "Asia/Shanghai"
七、k8s部署redis设置redis登陆密码
遇到到问题:
按照docker-compose部署的方式,将redis.conf已configmap的形式挂载到容器内的/etc/下之后正常启动redis应该就可以启动了。然后redis启动后仍然没有开启密码这就奇怪了。
配置文件明明配置了密码的呀。于是怀疑到了配置文件没有生效。查看docker hub redis Dockerfile发现Dockerfile最后一行为CMD ["redis-server"],并没有指定redis的配置文件。
为了测试我将configmap挂载到了pod的/tmp目录下,然后进行了一个全盘的搜索只查找到了一个redis.conf并且是我挂载的。也就是说这个官方提供的镜像中没有配置文件。
解决思路:在启动redis的时候指定配置文件
解决方法:
redis.conf配置文件的内容,注意这里只留必要的参数。尤其是带路径的配置一定要看好了,路径一定得是容器中存在的路径,否则在启动redis的时候就会报错。
bind 0.0.0.0
port 6379
requirepass shanjing0322
pidfile .pid
appendonly yes
cluster-config-file nodes-6379.conf
dir /data/
cluster-node-timeout 5000
protected-mode no
redis deployment.yaml 增加以下部分
command: ["sh","-c","exec redis-server /etc/redis.conf"]
八、kubernetes的configmap格式错乱问题json/yaml格式化
kubectl get cm rules-configmap -n monitoring -o json | jq '.data."ingress-nginx.yaml"' -r
九、获取所有deployment的副本和cpu、内存
kubectl get deployment -n spatio-prod -o=custom-columns=服务名:metadata.name,副本数量:spec.replicas,CPU:spec.template.spec.containers[0].resources.limits.cpu,内存:spec.template.spec.containers[0].resources.limits.memory
十、更新daemonSet、deployment 实现每次更新一个容器
利用maxSurge、maxUnavailable 实现
updateStrategy:
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
type: RollingUpdate
更多推荐
所有评论(0)