一,創建解壓目錄
kubernetes-server-linux-amd64.tar.gz 解壓後,其中會有kubernetes-src.tar.gz 文件
#創建解壓目錄
mkdir /opt/kubernetes/package/kubernetes/kubernetes-src
#解壓
tar -zxvf /opt/kubernetes/package/kubernetes/kubernetes-src.tar.gz -C /opt/kubernetes/package/kubernetes/kubernetes-src/
#查看是否解壓成功
ls /opt/kubernetes/package/kubernetes/kubernetes-src
二,創建配置文件
cd /opt/kubernetes/package/kubernetes/kubernetes-src/cluster/addons/dns/coredns/
cp coredns.yaml.base coredns.yaml
source /root/env.sh
sed -i -e "s#__PILLAR__DNS__DOMAIN__#${CLUSTER_DNS_DOMAIN}#" -e "s#__PILLAR__DNS__SERVER__#${CLUSTER_DNS_SVC_IP}#" coredns.yaml
sed -i "s#k8s.gcr.io/coredns:1.3.1#coredns/coredns:1.4.0#" coredns.yaml
三,創建 coredns
kubectl create -f coredns.yaml
四,檢查 coredns 功能
kubectl get all -n kube-system
#輸出:
NAME READY STATUS RESTARTS AGE
pod/coredns-5bcf987f9d-fts96 1/1 Running 0 6s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-dns ClusterIP 10.1.0.2 <none> 53/UDP,53/TCP,9153/TCP 6s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/coredns 1/1 1 1 6s
NAME DESIRED CURRENT READY AGE
replicaset.apps/coredns-5bcf987f9d 1 1 1 6s
五,新建一個 Deployment
cat > my-nginx.yaml <<EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx:1.7.9
ports:
- containerPort: 80
EOF
kubectl create -f my-nginx.yaml
六,export 該 Deployment, 生成 my-nginx
服務
kubectl expose deploy my-nginx
kubectl get services --all-namespaces |grep my-nginx
#輸出:
default my-nginx ClusterIP 10.1.225.115 <none> 80/TCP 20m
七,創建另一個 Pod
#查看 /etc/resolv.conf
是否包含 kubelet
配置的 --cluster-dns
和 --cluster-domain
,是否能夠將服務 my-nginx
解析到上面顯示的 Cluster IP 10.1.0.2
cat > dnsutils-ds.yml <<EOF
apiVersion: v1
kind: Service
metadata:
name: dnsutils-ds
labels:
app: dnsutils-ds
spec:
type: NodePort
selector:
app: dnsutils-ds
ports:
- name: http
port: 80
targetPort: 80
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: dnsutils-ds
labels:
addonmanager.kubernetes.io/mode: Reconcile
spec:
template:
metadata:
labels:
app: dnsutils-ds
spec:
containers:
- name: my-dnsutils
image: tutum/dnsutils:latest
command:
- sleep
- "3600"
ports:
- containerPort: 80
EOF
kubectl create -f dnsutils-ds.yml
kubectl get pods -lapp=dnsutils-ds
#輸出:
NAME READY STATUS RESTARTS AGE
dnsutils-ds-464hp 1/1 Running 0 23m
dnsutils-ds-chfmn 1/1 Running 0 23m
dnsutils-ds-zgnpk 1/1 Running 0 23m
八,驗證
#dnsutils-ds-464hp容器名字有所不同,根據自己的輸入
kubectl -it exec dnsutils-ds-464hp cat /etc/resolv.conf
#輸出:
nameserver 10.1.0.2
search default.svc.cluster.local. svc.cluster.local. cluster.local. openstacklocal
options ndots:5
kubectl -it exec dnsutils-ds-464hp nslookup kubernetes
#輸出:
Server: 10.1.0.2
Address: 10.1.0.2#53
Name: kubernetes.default.svc.cluster.local
Address: 10.1.0.1
kubectl -it exec dnsutils-ds-464hp nslookup www.baidu.com
#輸出:
Server: 10.1.0.2
Address: 10.1.0.2#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 220.181.38.149
Name: www.a.shifen.com
Address: 220.181.38.150
kubectl -it exec dnsutils-ds-464hp nslookup my-nginx
#輸出:
Server: 10.1.0.2
Address: 10.1.0.2#53
Name: my-nginx.default.svc.cluster.local
Address: 10.1.225.115
kubectl -it exec dnsutils-ds-464hp nslookup kube-dns.kube-system.svc
#輸出:
Server: 10.1.0.2
Address: 10.1.0.2#53
Name: kube-dns.kube-system.svc.cluster.local
Address: 10.1.0.
kubectl -it exec dnsutils-ds-464hp nslookup kube-dns.kube-system.svc.cluster.local
#輸出:
Server: 10.1.0.2
Address: 10.1.0.2#53
Name: kube-dns.kube-system.svc.cluster.local
Address: 10.1.0.2
kubectl -it exec dnsutils-ds-464hp nslookup kube-dns.kube-system.svc.cluster.local.
#輸出:
Server: 10.1.0.2
Address: 10.1.0.2#53
Name: kube-dns.kube-system.svc.cluster.local
Address: 10.1.0.2