helm-wrapper
helm-wrapper copied to clipboard
how to modify params of delivery mode from url to request.body ?
@dnsisme 你的意思是通过 url 修改 request.body 的数据吗?这个应该做不了吧
@opskumu 您好 上次你提到的修改参数传递方式开发完成了,实现思路,就是将之前的url传递参数方式更新为通过body方式传递参数。
我遇到一个新的问题,无论是以二进制程序的启动方式启动程序还是直接go run main.go启动程序,从办公网甚至是本地请求查看releases接口信息的时候,出现连接集群报错如下:
这里我首先把apiserver 6443代理映射成内网可以访问的端口范围:8000-9000:kubectl proxy --address='0.0.0.0' --accept-hosts='^*$' --port=8009
然后在根据源码的方式赋值集群变量,去测试还是连不上。
你有遇到这个问题吗?
@dnsisme 图都挂了
另外需要确认下你 kubeconfig 配置应该是配置好的吧
@opskumu kubeconfig就是k8s集群的~/.kube/config
apiVersion: v1
clusters:
- cluster:
certificate-authority-data:xxx==
server: https://10.153.70.18:6443
name: cluster.local
- cluster:
server: ""
name: default
contexts:
- context:
cluster: cluster.local
user: kubernetes-admin
name: [email protected]
current-context: [email protected]
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data:xxx
client-key-data:xxx=
办公网请求报错
根据源码修改测试连接结果如下
func listReleases(c *gin.Context) {
params := &_struct.ListReleasesParams{}
err := c.BindJSON(params)
if err != nil {
err := errors.New("bind params error")
respErr(c, err)
return
}
namespace := params.Namespace
//内网下请求 KubeAPIServer 的地址,默认端口:6443
settings.KubeAPIServer = "http://10.153.70.18:8009"
//适用于多集群的场景,用于区分不同的集群,类似于天牛的环境ID
kubeContext := params.KubeContext
dir, err := os.Getwd()
if err != nil {
panic(err)
}
file := dir + "/conf/kube/config"
kubeConfig, err := os.ReadFile(file)
if err != nil {
panic(err)
}
//rr.GET("/first", func(c *gin.Context) {
// fmt.Println("first .........")
// })
var options releaseListOptions
err = c.ShouldBindJSON(&options)
if err != nil && err != io.EOF {
respErr(c, err)
return
}
actionConfig, err := actionConfigInit(InitKubeInformation(namespace, kubeContext, string(kubeConfig)))
if err != nil {
respErr(c, err)
return
}
源码如下
@dnsisme kubeConfig
直接指定文件名就好了,不要读取啊,这里是它的文件路径,不是内容
file := dir + "/conf/kube/config"
kubeConfig, err := os.ReadFile(file)
if err != nil {
panic(err)
}
@opskumu 不好意思,我没太懂,kubeConfig存在工程目录/conf/kube下,名称就是config,直接文件名它会和其他路径下的相同文件名重合。
@dnsisme 你代码里面不需要 ReadFile,kubeConfig 是 kubeConfig 的文件路径
func listReleases(c *gin.Context) {
......
// 这就是你下面要传的 kubeConfig,kubeConfig 路径不是读取文件的内容
kubeConfig := dir + "/conf/kube/config"
// kubeConfig, err := os.ReadFile(file)
// if err != nil {
// panic(err)
// }
//rr.GET("/first", func(c *gin.Context) {
// fmt.Println("first .........")
// })
......
actionConfig, err := actionConfigInit(InitKubeInformation(namespace, kubeContext, kubeConfig))
if err != nil {
respErr(c, err)
return
}
@opskumu 嗯嗯 我改了运行了一下 发现一个新问题 这里的kubecontext我需要给传入什么呢?本地调试发现这里失败了
@dnsisme 如果 kubeconfig 是单一集群的,直接指定 ""
就好了
apiVersion: v1
clusters:
- cluster:
certificate-authority-data:xxx==
server: https://10.153.70.18:6443
name: cluster.local
- cluster:
server: ""
name: default
contexts:
- context:
cluster: cluster.local
user: kubernetes-admin
name: [email protected] // 这个就是 context
current-context: [email protected]
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data:xxx
client-key-data:xxx=
@opskumu
我改成""以后本地调试还是卡在下面了
@dnsisme client.Run() 你这是做啥啊,如果要部署或者升级得传 name 啊
@opskumu
我是测试下面接口可用性
接口:/api/namespaces/releases
功能:查看指定namespace下的应用信息
卡住了,也不报错吗
@opskumu
昨天一直卡住,今天重试可以请求到了,如下
这里我如果需要区分多集群的话就将~/.kube/config中下面的值赋给kubeContext吗?
我发现我们三个k8s集群的值都是一样的,这个怎么区分呀?我是否可以将其自己修改成一个自定义的值,用来区分三个集群呢? [email protected]
@dnsisme kubeconfig context 名需要你们自己定义的哈
@opskumu 好的,请教个其他问题,该开源代码可以实现远程云端或者是网络隔离的院端k8s集群吗?
@opskumu
好的,请教个其他问题,该开源代码可以实现远程云端或者是网络隔离的院端k8s集群吗?
主要依赖 kubeconfig,可以访问就行
@opskumu 大佬 请教下我这边镜像仓库的认证信息是通过账号密码来访问的,我这边传入这俩参数以后,发现还是回请求镜像仓库提示401
我如何成功访问到镜像仓库呢?
@dnsisme 支持这些选项
// Entry represents a collection of parameters for chart repository
type Entry struct {
Name string `json:"name"`
URL string `json:"url"`
Username string `json:"username"`
Password string `json:"password"`
CertFile string `json:"certFile"`
KeyFile string `json:"keyFile"`
CAFile string `json:"caFile"`
InsecureSkipTLSverify bool `json:"insecure_skip_tls_verify"`
}
修改配置如:
helmRepos:
- name: bitnami
url: https://charts.bitnami.com/bitnami
insecure_skip_tls_verify: true
username: <>
password: <>
@opskumu 好的 感谢大佬 请教下 我如何实现一个chart管理应用程序的更新呢?我们有chart.tar.gz的部署包,有统一管理的镜像仓库地址,镜像仓库我按照你提供的参数去传递相关值即可。
这里具体需要关注的是uploadchart接口呢还是说仅仅需要关注upgraderelease接口即可呢?
@dnsisme 通过 upgrade release 接口就好了,那个 upload chart 只是方便上传 chart 的
好的 请教下我在测试更新接口的时候出现如下问题

这里我可以通过让用户传入namespace、chart、release信息,实现程序内部判断当namespace下release存在的时候,则调用更新方法,否则调用安装release方法。这里大概怎么实现呢,是否支持?

upgrade 里面有一个 install 选项,如果不存在则安装,如果存在则更新
你出现的问题是不是本身目标的 chart 有问题呢
@dnsisme 你截图里面有密码信息,屏蔽下吧
@opskumu
确实是我长传的chart不对,没找到,所以报如上问题。现在是我直接调用upgraderelease接口,第一次安装一个新的服务,这里我想请问下如何动态实现存在则更新不存在则安装呢,我按照如下方式传递参数以后,正常应该是直接安装ihcloud-console这个应用,但还是提示如下问题。其中debug这个namespace已经存在啦,所以设置create_namespace为false,另一个参数不懂具体啥意思,也设置了false.
1、我多次测试发现一个新的应用无法直接通过upgraderelease接口实现安装,会提示"xxx" has no deployed releases问题,这里确实没有发布过,但是按照传递参数情况需要直接安装在传递进来的namespace下,结果没安装成功。
2、直接调用install接口测试在一个新空间下安装一个新应用,报错如下。
3、我直接对已存在的应用不做任何的更改调用upgraderelease接口,可以完成更新。
这里我希望对外只暴露一个upgraderelease的接口,直接实现安装更新。

create_namespace 和 dependency 那两个是 install 的选项,不过 upgrade 里面如果你指定了 install 为 true 则可以指定 create_namespace 选项
@dnsisme 另外,你是基于 master 分支的吧,之前 upgrade 有一个 bug,前一段时间才修复的