Skip to content

Commit

Permalink
helm/kubedns文档更新
Browse files Browse the repository at this point in the history
  • Loading branch information
gjmzj committed Feb 15, 2019
1 parent 6d544cc commit e895f7f
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 42 deletions.
27 changes: 2 additions & 25 deletions docs/guide/helm.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,7 @@

`Helm`致力于成为k8s集群的应用包管理工具,希望像linux 系统的`RPM` `DPKG`那样成功;确实在k8s上部署复杂一点的应用很麻烦,需要管理很多yaml文件(configmap,controller,service,rbac,pv,pvc等等),而helm能够整齐管理这些文档:版本控制,参数化安装,方便的打包与分享等。
- 建议积累一定k8s经验以后再去使用helm;对于初学者来说手工去配置那些yaml文件对于快速学习k8s的设计理念和运行原理非常有帮助,而不是直接去使用helm,面对又一层封装与复杂度。

## 安装(开发测试环境)

在开发环境安装(不考虑安全性问题)很方便,除了tiller官方镜像需要翻墙下载。
- 客户端:从最新[release](https://github.com/kubernetes/helm/releases),下载helm-v2.9.1-linux-amd64.tar.gz到本地,解压后把二进制直接放到环境PATH下即可
- 服务端:不能翻墙的可以使用docker hub上的转存镜像,比如jmgao1983/tiller:v2.9.1
helm默认使用kubectl客户端相同的配置文件去访问k8s集群,因此只要在能使用kubectl的节点运行如下,即能进行安装。
``` bash
$ helm init --tiller-image jmgao1983/tiller:v2.9.1
```
- 验证
``` bash
$ kubectl get pod --all-namespaces|grep tiller
kube-system tiller-deploy-7c6cd89d69-72r7j 1/1 Running 0 10h

$ helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
```

如果 `helm version` 出现如下错误,在每个节点安装 `socat`即可(如 apt install socat)
``` bash
E0522 22:22:15.492436 24409 portforward.go:331] an error occurred forwarding 38398 -> 44134: error forwarding port 44134 to pod dc6da4ab99ad9c497c0cef1776b9dd18e0a612d507e2746ed63d36ef40f30174, uid : unable to do port forwarding: socat not found.
Error: cannot connect to Tiller
```
- 本文参考 helm 官网安全实践启用 TLS 认证,参考 https://docs.helm.sh/using_helm/#securing-your-helm-installation

## 安全安装 helm(在线)

Expand All @@ -51,6 +27,7 @@ $ ansible-playbook /etc/ansible/roles/helm/helm.yml

- 执行与tiller服务有关的命令,比如 `helm ls` `helm version` `helm install`等需要加`--tls`参数
- 执行其他命令,比如`helm search` `helm fetch` `helm home`等不需要加`--tls`
- helm v2.11.0及以上版本,启用环境变量 HELM_TLS_ENABLE=true,可以都不用加 --tls 参数

## 安全安装 helm(离线)
在内网环境中,由于不能访问互联网,无法连接repo地址,使用上述的在线安装helm的方式会报错。因此需要使用离线安装的方法来安装。
Expand Down
35 changes: 18 additions & 17 deletions docs/guide/kubedns.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,6 @@ $ kubectl create -f /etc/ansible/manifests/coredns
```

+ 集群 pod默认继承 node的dns 解析,修改 kubelet服务启动参数 --resolv-conf="",可以更改这个特性,详见 kubelet 启动参数
+ 如果你使用`calico`网络组件,通过命令`ansible-playbook 90.setup.yml`安装完集群后,直接安装dns组件,可能会出现如下BUG,分析是因为calico分配pod地址时候会从网段的第一个地址(网络地址)开始,详见提交的 [ISSUE #1710](https://github.com/projectcalico/calico/issues/1710),临时解决办法为手动删除POD,重新创建后获取后面的IP地址

```
# BUG出现现象
$ kubectl get pod --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE
default busy-5cc98488d4-s894w 1/1 Running 0 28m 172.20.24.193 192.168.97.24
kube-system calico-kube-controllers-6597d9c664-nq9hn 1/1 Running 0 1h 192.168.97.24 192.168.97.24
kube-system calico-node-f8gnf 2/2 Running 0 1h 192.168.97.24 192.168.97.24
kube-system kube-dns-69bf9d5cc9-c68mw 0/3 CrashLoopBackOff 27 31m 172.20.24.192 192.168.97.24
# 解决办法,删除pod,自动重建
$ kubectl delete pod -n kube-system kube-dns-69bf9d5cc9-c68mw
```

### 验证 dns服务

Expand All @@ -47,10 +33,10 @@ kubectl get svc|grep nginx
nginx ClusterIP 10.68.33.167 <none> 80/TCP 1m
```

测试pod busybox
测试pod alpine

``` bash
kubectl run busybox --rm -it --image=busybox /bin/sh
kubectl run test --rm -it --image=alpine /bin/sh
If you don't see a command prompt, try pressing enter.
/ # cat /etc/resolv.conf
nameserver 10.68.0.2
Expand Down Expand Up @@ -80,4 +66,19 @@ Address 2: 180.97.33.107
/ #
```
- Note: 使用``` kubectl run b1 -it --rm --image=alpine /bin/sh``` 进行```nslookup <svc>; nslookup <svc>.<namespace>```解析, busybox内的nslookup程序有bug, 详见 https://github.com/kubernetes/dns/issues/109
- Note1: 如果你使用`calico`网络组件,通过命令`ansible-playbook 90.setup.yml`安装完集群后,直接安装dns组件,可能会出现如下BUG,分析是因为calico分配pod地址时候会从网段的第一个地址(网络地址)开始,详见提交的 [ISSUE #1710](https://github.com/projectcalico/calico/issues/1710),临时解决办法为手动删除POD,重新创建后获取后面的IP地址
```
# BUG出现现象
$ kubectl get pod --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE
default busy-5cc98488d4-s894w 1/1 Running 0 28m 172.20.24.193 192.168.97.24
kube-system calico-kube-controllers-6597d9c664-nq9hn 1/1 Running 0 1h 192.168.97.24 192.168.97.24
kube-system calico-node-f8gnf 2/2 Running 0 1h 192.168.97.24 192.168.97.24
kube-system kube-dns-69bf9d5cc9-c68mw 0/3 CrashLoopBackOff 27 31m 172.20.24.192 192.168.97.24
# 解决办法,删除pod,自动重建
$ kubectl delete pod -n kube-system kube-dns-69bf9d5cc9-c68mw
```
- Note2: 使用``` kubectl run test -it --rm --image=busybox /bin/sh``` 进行解析测试可能会失败, busybox内的nslookup程序有bug, 详见 https://github.com/kubernetes/dns/issues/109

0 comments on commit e895f7f

Please sign in to comment.