《kubernetes-1.8.0》07-addon-kubedns
《kubernetes 1.8.0 测试环境安装部署》
时间:2017-11-23
一、修改kubedns配置
DNS 组件部署非常简单,直接创建相应的 deployment 等即可:
# 获取文件 当前版本`1.14.7`,可从后续给的百度盘中下载相关文件。
wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dns/kube-dns.yaml.sed
mv kube-dns.yaml.sed kube-dns.yaml
# 修改配置
sed -i 's/$DNS_DOMAIN/cluster.local/gi' kube-dns.yaml
sed -i 's/$DNS_SERVER_IP/10.254.0.2/gi' kube-dns.yaml
二、准备镜像
鉴于科学上网,提供百度云资源:kubedns 1.14.7 密码:jhxc
cd ~/k8s/images
tar -zxvf kubedns-1.14.7.tar.gz
for IP in `seq 131 134`; do
scp ./gcr.io_google_containers* root@172.18.169.$IP:~/images
ssh root@172.18.169.$IP docker load -i ~/images/gcr.io_google_containers_cluster-proportional-autoscaler-amd64_1.1.2-r2.tar
ssh root@172.18.169.$IP docker load -i ~/images/gcr.io_google_containers_k8s-dns-dnsmasq-nanny-amd64_1.14.7.tar
ssh root@172.18.169.$IP docker load -i ~/images/gcr.io_google_containers_k8s-dns-kube-dns-amd64_1.14.7.tar
ssh root@172.18.169.$IP docker load -i ~/images/gcr.io_google_containers_k8s-dns-sidecar-amd64_1.14.7.tar
done
三、创建deployment并查看
# 创建:
kubectl create -f kube-dns.yaml
# 查看:
[root@node-131 kubedns]# kubectl get deployment -n kube-system
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
...
kube-dns 1 1 1 1 1m
[root@node-131 kubedns]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
...
kube-dns-74dbf45884-bpc9w 3/3 Running 0 2m
四、测试kubedns
创建两组 Pod 和 Service,进入 Pod 中 curl 另一个 Service 名称看看是否能解析;同时还要测试一下外网能否解析
# 创建测试deply
cat > test.deploy.yml << EOF
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.13.5-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
EOF
# 创建test.deploy对应service
$cat > test.service.yml << EOF
kind: Service
apiVersion: v1
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 31000
type: NodePort
EOF
# 为之前做的demo deploy创建service
$ cat > demo.service.yml << EOF
kind: Service
apiVersion: v1
metadata:
name: demo-service
spec:
selector:
app: demo
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 31001
type: NodePort
EOF
# 创建:
$ kubectl create -f test.deploy.yml
$ kubectl create -f test.service.yml
$ kubectl create -f demo.service.yml
# 查看:
[root@node-131 deploy]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
demo-deployment-5fc9c54fb4-5pgfk 1/1 Running 1 5h 192.168.177.66 node.132
demo-deployment-5fc9c54fb4-5svgl 1/1 Running 1 5h 192.168.33.194 node.131
demo-deployment-5fc9c54fb4-dfcfd 1/1 Running 1 5h 192.168.188.2 node.133
demo-deployment-5fc9c54fb4-dttvb 1/1 Running 1 5h 192.168.56.66 node.134
nginx-deployment-5d56d45798-24ptc 1/1 Running 0 1m 192.168.33.195 node.131
nginx-deployment-5d56d45798-gjr6s 1/1 Running 0 1m 192.168.188.3 node.133
nginx-deployment-5d56d45798-wtfcg 1/1 Running 0 1m 192.168.177.68 node.132
[root@node-131 deploy]# kubectl get service -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
demo-service NodePort 10.254.23.220 <none> 80:31001/TCP 1m app=demo
kubernetes ClusterIP 10.254.0.1 <none> 443/TCP 22h <none>
nginx-service NodePort 10.254.197.49 <none> 80:31000/TCP 1m app=nginx
# 测试dns解析-pod内部
[root@node-131 deploy]# kubectl exec -ti demo-deployment-5fc9c54fb4-5svgl bash
bash-4.3# curl http://nginx-service
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
# 测试dns解析-访问外网
bash-4.3# curl https://www.baidu.com
<!DOCTYPE html>
<!--STATUS OK--><html> <head>...使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
五、部署DNS自动扩容
下载 yaml,然后创建一下即可,不需要修改任何配置(相关镜像已经在二、准备镜像过程中完成):
$ wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dns-horizontal-autoscaler/dns-horizontal-autoscaler.yaml
$ kubectl create -f dns-horizontal-autoscaler.yaml
查看效果:
[root@node-131 kubedns]# kubectl get pod -o wide -n kube-system
NAME READY STATUS RESTARTS AGE IP NODE
calico-kube-controllers-94b7cb897-krckw 1/1 Running 1 5h 172.18.169.131 node.131
calico-node-5dc8z 2/2 Running 2 5h 172.18.169.132 node.132
calico-node-gm9k8 2/2 Running 2 5h 172.18.169.133 node.133
calico-node-kt5fk 2/2 Running 2 5h 172.18.169.134 node.134
calico-node-xds45 2/2 Running 2 5h 172.18.169.131 node.131
kube-dns-74dbf45884-bpc9w 3/3 Running 0 16m 192.168.56.67 node.134
kube-dns-74dbf45884-nsr45 3/3 Running 0 15s 192.168.33.196 node.131
kube-dns-autoscaler-996dcfc9d-t9ddt 1/1 Running 0 16s 192.168.56.68 node.134
查看autoscaling 相关参数:
# 查看kube-dns-autoscaler相关configmap:
$ kubectl get configmap --namespace=kube-system
NAME DATA AGE
...
kube-dns-autoscaler 1 2m
# 在线编辑该配置文件:
$ kubectl edit configmap kube-dns-autoscaler --namespace=kube-system
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
linear: '{"coresPerReplica":256,"nodesPerReplica":16,"preventSinglePointFailure":true}'
kind: ConfigMap
metadata:
creationTimestamp: 2017-11-23T08:23:25Z
name: kube-dns-autoscaler
namespace: kube-system
resourceVersion: "107837"
selfLink: /api/v1/namespaces/kube-system/configmaps/kube-dns-autoscaler
uid: 93970ef3-d027-11e7-8cb4-005056bc52e5
coresPerReplica
: 满256
个pod增加一个 dns ReplicanodesPerReplica
: 满16
个node增加一个 dns ReplicapreventSinglePointFailure
:是否开启单点故障预防,缺省为true,此时会立即再启一个dns Replica
至此kube-dns以及相关的autoscaler部署完成
本系列其他内容:
参考链接:
https://mritd.me/2017/10/09/set-up-kubernetes-1.8-ha-cluster/
https://kubernetes.io/docs/tasks/administer-cluster/dns-horizontal-autoscaling/