2022-12-23:portainer是docker的web可视化工具。如果根据docker部署去写yaml,默认local是
2023-02-26 09:49:36 时间
2022-12-23:portainer是docker的web可视化工具。如果根据docker部署去写yaml,默认local是k8s,而不是docker,这不符合需求,需要修改yaml。请问部署在 k3s 中,并且默认local是docker,yaml 文件如何写?
答案2022-12-23:
1.portainer在默认情况下用的是k8s环境,所以需要改成docker环境,根据如下代码块一的go代码可知,把"KUBERNETES_SERVICE_HOST"环境变量设置为空,就会把默认环境变成docker环境。
2.根据命令行参数,给--admin-password一个值,你就不需要创建用户了。
3.--admin-password是一个哈希值,根据如下代码块二的go代码可知,需要将密码转成哈希才行。"moonfdd--moonfdd"转换成哈希是"
// 代码块一
// api/platform/platform.go
const (
PodmanMode = "PODMAN"
KubernetesServiceHost = "KUBERNETES_SERVICE_HOST"
NomadJobName = "NOMAD_JOB_NAME"
)
// DetermineContainerPlatform will check for the existence of the PODMAN_MODE
// or KUBERNETES_SERVICE_HOST environment variable to determine if
// the container is running on Podman or inside the Kubernetes platform.
// Defaults to Docker otherwise.
func DetermineContainerPlatform() (ContainerPlatform, error) {
podmanModeEnvVar := os.Getenv(PodmanMode)
if podmanModeEnvVar == "1" {
return PlatformPodman, nil
}
serviceHostKubernetesEnvVar := os.Getenv(KubernetesServiceHost)
if serviceHostKubernetesEnvVar != "" {
return PlatformKubernetes, nil
}
nomadJobName := os.Getenv(NomadJobName)
if nomadJobName != "" {
return PlatformNomad, nil
}
if !isRunningInContainer() {
return "", nil
}
dockerCli, err := client.NewClientWithOpts()
if err != nil {
return "", errors.WithMessage(err, "failed to create docker client")
}
defer dockerCli.Close()
info, err := dockerCli.Info(context.Background())
if err != nil {
if client.IsErrConnectionFailed(err) {
log.Warn().
Err(err).
Msg("failed to retrieve docker info")
return "", nil
}
return "", errors.WithMessage(err, "failed to retrieve docker info")
}
if info.Swarm.NodeID == "" {
return PlatformDockerStandalone, nil
}
return PlatformDockerSwarm, nil
}
// 代码块二
// api/cmd/portainer/main.go
adminPasswordHash := ""
if *flags.AdminPasswordFile != "" {
content, err := fileService.GetFileContent(*flags.AdminPasswordFile, "")
if err != nil {
log.Fatal().Err(err).Msg("failed getting admin password file")
}
adminPasswordHash, err = cryptoService.Hash(strings.TrimSuffix(string(content), "\n"))
if err != nil {
log.Fatal().Err(err).Msg("failed hashing admin password")
}
} else if *flags.AdminPassword != "" {
adminPasswordHash = *flags.AdminPassword
}
yaml如下:
# 用户名:admin
# 密码:moonfdd--moonfdd
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: portainer
name: portainer
namespace: moonfdd
spec:
replicas: 1
selector:
matchLabels:
app: portainer
template:
metadata:
labels:
app: portainer
spec:
containers:
- env:
- name: "KUBERNETES_SERVICE_HOST"
value: ""
args:
- "--admin-password"
- "$2a$10$4m4rYwK/TA8GRkyz4UrZ2e8B4GDG8ZhBkyGawJ05q1zJ7zmLywzmW"
image: portainer/portainer-ce:alpine
imagePullPolicy: IfNotPresent
name: portainer
securityContext:
privileged: true
volumeMounts:
- mountPath: /var/run/docker.sock
name: volv
# - mountPath: /data
# name: volv2
volumes:
- hostPath:
path: /var/run/docker.sock
type: Socket
name: volv
# - hostPath:
# path: /root/k8s/moonfdd/portainer/data
# type: DirectoryOrCreate
# name: volv2
---
apiVersion: v1
kind: Service
metadata:
labels:
app: portainer
name: portainer
namespace: moonfdd
spec:
ports:
- port: 8000
protocol: TCP
targetPort: 8000
name: 8000-8000
- port: 9443
protocol: TCP
targetPort: 9443
name: 9443-9443
- port: 9000
protocol: TCP
targetPort: 9000
name: 9000-9000
selector:
app: portainer
type: NodePort
相关文章
- Adobe Acrobat Pro DC 2019 软件安装步骤 pdf编辑器全版本下载
- Acrobat DC绿色版安装教程 附软件安装包 PDF编辑器全版本下载
- pdf编辑器全版本下载 不接受反驳!绝对是同类软件中的神器!
- Adobe Acrobat XI Pro 11 软件安装步骤 PDF编辑器全版本下载
- 最佳的PDF编辑器Adobe Acrobat DC 2019 pdf编辑器全版本下载
- 投标人必备的PDF编辑器,完全免费!帮你实现pdf自由
- 还叫 “不可成药” 靶点?KRAS 已逆袭!- MedChemExpress
- 专业PDF编辑器,像编辑Word一样编辑PDF
- 靶向 EGFR 的 PROTAC 盘点 - MedChemExperss
- 科研助攻丨重组蛋白,看这篇就够了!- MecChemExpress
- 业务状态实时监控预警,「告警配置」来帮您
- 化合物不知道怎么用?达咩!| MedChemExpress
- 靶向肿瘤微环境 丨“冷”肿瘤如何变“热”- MedChemExpress
- 图片如何去除水印?这两种方法帮你无痕去除
- 快速传输大文件,怎么通过网络传大文件给对方(1G以上)
- 焊接机器人出现焊偏的解决方法
- 《上海悠悠接口自动化平台》体验地址与使用教程
- 《上海悠悠接口自动化平台》-1.新增API 与 各参数的描述
- 缓慢的Http拒绝服务攻击漏洞的验证(slowhttptest的安装)
- 《上海悠悠接口自动化平台》-2.extract 提取结果与validate 校验结果