本次系列使用的所需部署包版本都使用的目前最新的或最新穩定版,安裝包地址請到公衆號內回覆【K8s實戰】獲取node
介紹ios
項目地址:https://github.com/coredns/corednsnginx
CoreDNS是一個Go語言實現的鏈式插件DNS服務端,是CNCF成員,是一個高性能、易擴展的DNS服務端。能夠很方便的部署在k8s集羣中,用來代替kube-dns。git
下載coredns 編排es6
[root@master-01 ]#mkdir /opt/coredns && cd /opt/coredns[root@master-01 coredns]# wget https://raw.githubusercontent.com/coredns/deployment/master/kubernetes/coredns.yaml.sed[root@master-01 coredns]# wget https://raw.githubusercontent.com/coredns/deployment/master/kubernetes/deploy.sh
修改編排文件github
主要用到了deploy.sh和coredns.yam.sed,因爲不是從kube-dns轉到coredns,因此要註釋掉kubectl相關操做,修改REVERSE_CIDRS、DNS_DOMAIN、CLUSTER_DNS_IP等變量爲實際值api
[root@master-01 coredns]# chmod +x deploy.sh[root@master-01 coredns]# ./deploy.sh -s -r 10.254.0.0/16 -i 10.254.0.10 -d cluster.local > coredns.yaml[root@master-01 coredns]# diff coredns.yaml coredns.yaml.sed 58c58< kubernetes cluster.local 10.254.0.0/16 {---> kubernetes CLUSTER_DOMAIN REVERSE_CIDRS {62c62< }---> }FEDERATIONS64c64< forward . /etc/resolv.conf---> forward . UPSTREAMNAMESERVER69c69< }---> }STUBDOMAINS171c171< clusterIP: 10.254.0.10---> clusterIP: CLUSTER_DNS_IP
部署coredns瀏覽器
[root@master-01 coredns]# kubectl create -f coredns.yamlserviceaccount/coredns createdclusterrole.rbac.authorization.k8s.io/system:coredns createdclusterrolebinding.rbac.authorization.k8s.io/system:coredns createdconfigmap/coredns createddeployment.apps/coredns createdservice/kube-dns created
測試功能app
查看svc地址ide
[root@master-02 kubernetes]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.254.0.1 <none> 443/TCP 19hnginx NodePort 10.254.58.237 <none> 80:34542/TCP 15h
起個busybox測試
[root@master-01 coredns]# kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools1If you don't see a command prompt, try pressing enter.dnstools# lsbin dev etc home lib media mnt proc root run sbin srv sys tmp usr vardnstools# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:2F:02 inet addr:172.17.47.2 Bcast:172.17.47.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1RX packets:8 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:656 (656.0 B) TX bytes:0 (0.0 B)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)dnstools# nslookup kubernetesServer: 10.254.0.10Address: 10.254.0.10#53Name: kubernetes.default.svc.cluster.localAddress: 10.254.0.1dnstools# nslookup nginxServer: 10.254.0.10Address: 10.254.0.10#53Name: nginx.default.svc.cluster.localAddress: 10.254.58.237dnstools# cat /etc/resolv.conf nameserver 10.254.0.10search default.svc.cluster.local. svc.cluster.local. cluster.local.options ndots:5dnstools# dnstools# ping baidu.comPING baidu.com (123.125.115.110): 56 data bytes64 bytes from 123.125.115.110: seq=0 ttl=127 time=36.423 ms64 bytes from 123.125.115.110: seq=1 ttl=127 time=35.546 ms
至此coredns部署完成,接下來安裝dashboard組件
dashboard部署
因爲國內不能下載gcr.io下的鏡像,因此使用阿里雲的
下載編排文件
[root@master-01]#mkdir /opt/dashboard &&cd /opt/dashboard[root@master-01dashboard]#wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
修改其中image地址爲阿里雲的地址
spec:containers:- name: kubernetes-dashboardimage: registry.cn-beijing.aliyuncs.com/minminmsn/kubernetes-dashboard:v1.10.1
修改其中Service配置,將type: ClusterIP改爲NodePort,便於經過Node端口訪問
# ------------------- Dashboard Service ------------------- kind: ServiceapiVersion: v1metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kube-systemspec:type: NodePortports:- port: 443targetPort: 8443selector:k8s-app: kubernetes-dashboard
生產自定義證書
[root@master-01 dashboard]# openssl req -nodes -newkey rsa:2048 -keyout dashboard.key -out dashboard.csr -subj "/C=/ST=/L=/O=/OU=/CN=kubernetes-dashboardGenerating a 2048 bit RSA private key...................+++................................................+++writing new private key to 'dashboard.key'-----No value provided for Subject Attribute C, skippedNo value provided for Subject Attribute ST, skippedNo value provided for Subject Attribute L, skippedNo value provided for Subject Attribute O, skippedNo value provided for Subject Attribute OU, skipped[root@master-01 dashboard]# openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crtSignature oksubject=/CN=kubernetes-dashboardGetting Private key[root@master-01 dashboard]# kubectl create secret generic kubernetes-dashboard-certs --from-file=. -n kube-systemsecret/kubernetes-dashboard-certs created
若是有購買證書的話,直接建立srcret便可
[root@master-01 dashboard]# kubectl create secret generic kubernetes-dashboard-certs --from-file=certs -n kube-systemsecret/kubernetes-dashboard-certs created
開始建立kubernetes-dashboard
[root@master-01 dashboard]# kubectl apply -f kubernetes-dashboard.yaml Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl applysecret/kubernetes-dashboard-certs configuredsecret/kubernetes-dashboard-csrf createdserviceaccount/kubernetes-dashboard createdrole.rbac.authorization.k8s.io/kubernetes-dashboard-minimal createdrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal createddeployment.apps/kubernetes-dashboard createdservice/kubernetes-dashboard created
查看服務狀態
[root@master-01 dashboard]# kubectl get pod -nkube-system -owideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATEScoredns-5d668bd598-dt4qm 1/1 Running 0 96m 172.17.79.3 192.168.209.132 <none> <none>coredns-5d668bd598-f5g96 1/1 Running 1 14h 172.17.44.2 192.168.209.131 <none> <none>kubernetes-dashboard-cb55bd5bd-gc84g 1/1 Running 0 55s 172.17.47.2 192.168.209.133 <none> <none>[root@master-01 dashboard]# kubectl -nkube-system get ep -owideNAME ENDPOINTS AGEkube-controller-manager <none> 20hkube-dns 172.17.44.2:53,172.17.79.3:53,172.17.44.2:53 + 3 more... 14hkube-scheduler <none> 20hkubernetes-dashboard 172.17.47.2:8443 97s[root@master-01 dashboard]# kubectl -nkube-system get svc -owideNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTORkube-dns ClusterIP 10.254.0.10 <none> 53/UDP,53/TCP,9153/TCP 14h k8s-app=kube-dnskubernetes-dashboard NodePort 10.254.65.137 <none> 443:49365/TCP 101s k8s-app=kubernetes-dashboard
瀏覽器訪問
選擇token訪問,token獲取方法以下
獲取token
[root@master-01 dashboard]# cat /k8s/yaml/admin-token.yaml kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1beta1metadata:name: adminannotations:rbac.authorization.kubernetes.io/autoupdate: "true"roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.iosubjects:- kind: ServiceAccountname: adminnamespace: kube-system---apiVersion: v1kind: ServiceAccountmetadata:name: adminnamespace: kube-systemlabels:kubernetes.io/cluster-service: "true"addonmanager.kubernetes.io/mode: Reconcile[root@master-01 dashboard]# kubectl apply -f admin-token.yaml clusterrolebinding.rbac.authorization.k8s.io/admin createdserviceaccount/admin created[root@master-01 dashboard]# kubectl describe secret/$(kubectl get secret -nkube-system |grep admin|awk '{print $1}') -nkube-systemName: admin-token-7lxxtNamespace: kube-systemLabels: <none>Annotations: kubernetes.io/service-account.name: adminkubernetes.io/service-account.uid: a913db42-4473-11e9-8484-000c29721372Type: kubernetes.io/service-account-tokenData====ca.crt: 1363 bytesnamespace: 11 bytestoken: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi03bHh4dCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE5MTNkYjQyLTQ0NzMtMTFlOS04NDg0LTAwMGMyOTcyMTM3MiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.ioFkVN9L_teW8Dda3vBGwiZVVL45tLghbPHQboSXEAq6C4sqnxZzKCfltO_B8hW2Cnkwzkghkw4YH6QvQuRQ7rakOYHUbVDynlt1TpjsBYNXTUp_DVCzNYLgK8ddkbG3SNnAurjqAAT7q4Cyy7e3v6h4vxmghyTTYRpYgtkpjxH-26TWD0FpwdO8iSfCnroNjUrEbm1vfCNRgJome7XNMLNZKcxB27V1wZk2Lk8suA67PtOv2iM_oL4UrO-qiVtLnq8mOqtwiJhk9eNk2zaDw0_2qZs9BsdYQwOB3pUkKEXktm9mIU4IUQXvBUKtA5Fltc6ZZ0WPv2x5JQ9d3PsVuw
訪問任意一個節點IP端口是NodePort動態生成的
出現以下頁面,選擇令牌,輸出剛查出的token,點擊登陸
首頁以下
好了,本章介紹瞭如何部署k8s組件coredns和dashboard,敬請期待後續分享,謝謝
END
若是您以爲不錯,請別忘了轉發、分享、點贊讓更多的人去學習, 您的舉手之勞,就是對小編最好的支持,很是感謝!