哦呜 發表於 2020-4-8 11:34:00

Docker Desktop启动Kubernetes

<p>Docker_Desktop启动Kubernetes</p>
<p>参考仓库:https://github.com/AliyunContainerService/k8s-for-docker-desktop</p>
<p>视频参考:《如何安装Docker Desktop for Win10&nbsp;》</p>
<p>&nbsp;</p>
<p>安装的Docker_Desktop的版本是2.1.0.40693</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408111935646-394816357.png"></p>
<p>安装完成后,查看版本资料(又变成了2.1.0.5),可以看到Kubernetes版本是v1.14.8&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112005955-1460518687.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>设置分享磁盘&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112030231-1277028203.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>为Docker分配4核CPU,8G内存</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112051925-1421847434.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>为应用增加阿里云镜像加速器</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112118624-454790488.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Kubernetes先不着急启用</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112214641-1670735329.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>查看https://github.com/AliyunContainerService/k8s-for-docker-desktop 中的介绍,如刚才所看,docker_desktop v2.1.0的kubenetes版本是v1.14.8&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112253106-1778840185.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;我们将仓库切换到v1.14.8的分支</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112323589-241529781.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>切换了分支后,然后在仓库中运行Powershell命令,执行./load_images.ps1</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112351340-93039322.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>运行脚本,下载镜像</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112417643-810495492.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>经过不到一分钟的等待,镜像就全部下载完成了</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112441893-1225396972.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>回到docker desktop中,启动kubenetes,并选择show system containers,点击apply按钮</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112503066-1093616538.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>确定安装</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112514207-1684319826.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>等待安装kubenetes</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112541487-390946230.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>关于启动时候的日志,存放的位置在C:\ProgramData\DockerDesktop\service.txt</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112608826-1232041429.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>经过大概两分钟的等待,Kubernetes启动成功</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112635549-3244029.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>powershell查看kubectl 版本</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112658818-1282803287.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>开始配置Kubernetes</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112710893-1656254966.png"></p>
<p>执行结果</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112742723-262711307.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>开始配置Kubernetes控制台</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112802501-1448254574.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>打不开https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc5/aio/deploy/recommended.yaml,则用其他方法打开后,将内容复制到本地,再运行<br>内容如下</p>
<div class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_8b1c43ee-5b2b-4e01-a8a6-b3f2e4c8422a" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_8b1c43ee-5b2b-4e01-a8a6-b3f2e4c8422a" class="cnblogs_code_hide">
<pre># Copyright 2017<span style="color: rgba(0, 0, 0, 1)"> The Kubernetes Authors.
#
# Licensed under the Apache License, Version </span>2.0 (the "License"<span style="color: rgba(0, 0, 0, 1)">);
# you may not use </span><span style="color: rgba(0, 0, 255, 1)">this</span> file except <span style="color: rgba(0, 0, 255, 1)">in</span> compliance <span style="color: rgba(0, 0, 255, 1)">with</span><span style="color: rgba(0, 0, 0, 1)"> the License.
# You may obtain a copy of the License at
#
#   http:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">www.apache.org/licenses/LICENSE-2.0</span>
<span style="color: rgba(0, 0, 0, 1)">#
# Unless required by applicable law or agreed to </span><span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> writing, software
# distributed under the License is distributed on an </span>"AS IS"<span style="color: rgba(0, 0, 0, 1)"> BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> the specific language governing permissions and
# limitations under the License.

apiVersion: v1
kind: Namespace
metadata:
name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard

</span>---<span style="color: rgba(0, 0, 0, 1)">

apiVersion: v1
kind: ServiceAccount
metadata:
labels:
    k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard

</span>---<span style="color: rgba(0, 0, 0, 1)">

kind: Service
apiVersion: v1
metadata:
labels:
    k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
spec:
ports:
    </span>- port: 443<span style="color: rgba(0, 0, 0, 1)">
      targetPort: </span>8443<span style="color: rgba(0, 0, 0, 1)">
selector:
    k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard

</span>---<span style="color: rgba(0, 0, 0, 1)">

apiVersion: v1
kind: Secret
metadata:
labels:
    k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
name: kubernetes</span>-dashboard-<span style="color: rgba(0, 0, 0, 1)">certs
namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
type: Opaque

</span>---<span style="color: rgba(0, 0, 0, 1)">

apiVersion: v1
kind: Secret
metadata:
labels:
    k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
name: kubernetes</span>-dashboard-<span style="color: rgba(0, 0, 0, 1)">csrf
namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
type: Opaque
data:
csrf: </span>""

---<span style="color: rgba(0, 0, 0, 1)">

apiVersion: v1
kind: Secret
metadata:
labels:
    k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
name: kubernetes</span>-dashboard-key-<span style="color: rgba(0, 0, 0, 1)">holder
namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
type: Opaque

</span>---<span style="color: rgba(0, 0, 0, 1)">

kind: ConfigMap
apiVersion: v1
metadata:
labels:
    k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
name: kubernetes</span>-dashboard-<span style="color: rgba(0, 0, 0, 1)">settings
namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard

</span>---<span style="color: rgba(0, 0, 0, 1)">

kind: Role
apiVersion: rbac.authorization.k8s.io</span>/v1
<span style="color: rgba(0, 0, 0, 1)">metadata:
labels:
    k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
rules:
# Allow Dashboard to get, update and </span><span style="color: rgba(0, 0, 255, 1)">delete</span><span style="color: rgba(0, 0, 0, 1)"> Dashboard exclusive secrets.
</span>- apiGroups: [""<span style="color: rgba(0, 0, 0, 1)">]
    resources: [</span>"secrets"<span style="color: rgba(0, 0, 0, 1)">]
    resourceNames: [</span>"kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"<span style="color: rgba(0, 0, 0, 1)">]
    verbs: [</span>"get", "update", "delete"<span style="color: rgba(0, 0, 0, 1)">]
    # Allow Dashboard to get and update </span>'kubernetes-dashboard-settings'<span style="color: rgba(0, 0, 0, 1)"> config map.
</span>- apiGroups: [""<span style="color: rgba(0, 0, 0, 1)">]
    resources: [</span>"configmaps"<span style="color: rgba(0, 0, 0, 1)">]
    resourceNames: [</span>"kubernetes-dashboard-settings"<span style="color: rgba(0, 0, 0, 1)">]
    verbs: [</span>"get", "update"<span style="color: rgba(0, 0, 0, 1)">]
    # Allow Dashboard to get metrics.
</span>- apiGroups: [""<span style="color: rgba(0, 0, 0, 1)">]
    resources: [</span>"services"<span style="color: rgba(0, 0, 0, 1)">]
    resourceNames: [</span>"heapster", "dashboard-metrics-scraper"<span style="color: rgba(0, 0, 0, 1)">]
    verbs: [</span>"proxy"<span style="color: rgba(0, 0, 0, 1)">]
</span>- apiGroups: [""<span style="color: rgba(0, 0, 0, 1)">]
    resources: [</span>"services/proxy"<span style="color: rgba(0, 0, 0, 1)">]
    resourceNames: [</span>"heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"<span style="color: rgba(0, 0, 0, 1)">]
    verbs: [</span>"get"<span style="color: rgba(0, 0, 0, 1)">]

</span>---<span style="color: rgba(0, 0, 0, 1)">

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io</span>/v1
<span style="color: rgba(0, 0, 0, 1)">metadata:
labels:
    k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
rules:
# Allow Metrics Scraper to get metrics from the Metrics server
</span>- apiGroups: ["metrics.k8s.io"<span style="color: rgba(0, 0, 0, 1)">]
    resources: [</span>"pods", "nodes"<span style="color: rgba(0, 0, 0, 1)">]
    verbs: [</span>"get", "list", "watch"<span style="color: rgba(0, 0, 0, 1)">]

</span>---<span style="color: rgba(0, 0, 0, 1)">

apiVersion: rbac.authorization.k8s.io</span>/v1
<span style="color: rgba(0, 0, 0, 1)">kind: RoleBinding
metadata:
labels:
    k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
subjects:
</span>-<span style="color: rgba(0, 0, 0, 1)"> kind: ServiceAccount
    name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
    namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard

</span>---<span style="color: rgba(0, 0, 0, 1)">

apiVersion: rbac.authorization.k8s.io</span>/v1
<span style="color: rgba(0, 0, 0, 1)">kind: ClusterRoleBinding
metadata:
name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
subjects:
</span>-<span style="color: rgba(0, 0, 0, 1)"> kind: ServiceAccount
    name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
    namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard

</span>---<span style="color: rgba(0, 0, 0, 1)">

kind: Deployment
apiVersion: apps</span>/v1
<span style="color: rgba(0, 0, 0, 1)">metadata:
labels:
    k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
name: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
spec:
replicas: </span>1<span style="color: rgba(0, 0, 0, 1)">
revisionHistoryLimit: </span>10<span style="color: rgba(0, 0, 0, 1)">
selector:
    matchLabels:
      k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
template:
    metadata:
      labels:
      k8s</span>-app: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
    spec:
      containers:
      </span>- name: kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
          image: kubernetesui</span>/dashboard:v2.0.0-rc5
<span style="color: rgba(0, 0, 0, 1)">          imagePullPolicy: Always
          ports:
            </span>- containerPort: 8443<span style="color: rgba(0, 0, 0, 1)">
            protocol: TCP
          args:
            </span>- --auto-generate-<span style="color: rgba(0, 0, 0, 1)">certificates
            </span>- --namespace=kubernetes-<span style="color: rgba(0, 0, 0, 1)">dashboard
            # Uncomment the following line to manually specify Kubernetes API server Host
            # If not specified, Dashboard will attempt to auto discover the API server and connect
            # to it. Uncomment only </span><span style="color: rgba(0, 0, 255, 1)">if</span> the <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> does not work.
            # </span>- --apiserver-host=http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">my-address:port</span>
<span style="color: rgba(0, 0, 0, 1)">          volumeMounts:
            </span>- name: kubernetes-dashboard-<span style="color: rgba(0, 0, 0, 1)">certs
            mountPath: </span>/certs
            # Create on-<span style="color: rgba(0, 0, 0, 1)">disk volume to store exec logs
            </span>- mountPath: /tmp
            name: tmp-<span style="color: rgba(0, 0, 0, 1)">volume
          livenessProbe:
            httpGet:
            scheme: HTTPS
            path: </span>/<span style="color: rgba(0, 0, 0, 1)">
            port: </span>8443<span style="color: rgba(0, 0, 0, 1)">
            initialDelaySeconds: </span>30<span style="color: rgba(0, 0, 0, 1)">
            timeoutSeconds: </span>30<span style="color: rgba(0, 0, 0, 1)">
          securityContext:
            allowPrivilegeEscalation: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
            readOnlyRootFilesystem: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
            runAsUser: </span>1001<span style="color: rgba(0, 0, 0, 1)">
            runAsGroup: </span>2001<span style="color: rgba(0, 0, 0, 1)">
      volumes:
      </span>- name: kubernetes-dashboard-<span style="color: rgba(0, 0, 0, 1)">certs
          secret:
            secretName: kubernetes</span>-dashboard-<span style="color: rgba(0, 0, 0, 1)">certs
      </span>- name: tmp-<span style="color: rgba(0, 0, 0, 1)">volume
          emptyDir: {}
      serviceAccountName: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
      nodeSelector:
      </span>"beta.kubernetes.io/os"<span style="color: rgba(0, 0, 0, 1)">: linux
      # Comment the following tolerations </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> Dashboard must not be deployed on master
      tolerations:
      </span>- key: node-role.kubernetes.io/master
<span style="color: rgba(0, 0, 0, 1)">          effect: NoSchedule

</span>---<span style="color: rgba(0, 0, 0, 1)">

kind: Service
apiVersion: v1
metadata:
labels:
    k8s</span>-app: dashboard-metrics-<span style="color: rgba(0, 0, 0, 1)">scraper
name: dashboard</span>-metrics-<span style="color: rgba(0, 0, 0, 1)">scraper
namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
spec:
ports:
    </span>- port: 8000<span style="color: rgba(0, 0, 0, 1)">
      targetPort: </span>8000<span style="color: rgba(0, 0, 0, 1)">
selector:
    k8s</span>-app: dashboard-metrics-<span style="color: rgba(0, 0, 0, 1)">scraper

</span>---<span style="color: rgba(0, 0, 0, 1)">

kind: Deployment
apiVersion: apps</span>/v1
<span style="color: rgba(0, 0, 0, 1)">metadata:
labels:
    k8s</span>-app: dashboard-metrics-<span style="color: rgba(0, 0, 0, 1)">scraper
name: dashboard</span>-metrics-<span style="color: rgba(0, 0, 0, 1)">scraper
namespace: kubernetes</span>-<span style="color: rgba(0, 0, 0, 1)">dashboard
spec:
replicas: </span>1<span style="color: rgba(0, 0, 0, 1)">
revisionHistoryLimit: </span>10<span style="color: rgba(0, 0, 0, 1)">
selector:
    matchLabels:
      k8s</span>-app: dashboard-metrics-<span style="color: rgba(0, 0, 0, 1)">scraper
template:
    metadata:
      labels:
      k8s</span>-app: dashboard-metrics-<span style="color: rgba(0, 0, 0, 1)">scraper
      annotations:
      seccomp.security.alpha.kubernetes.io</span>/pod: 'runtime/<span style="color: rgba(0, 0, 255, 1)">default</span>'<span style="color: rgba(0, 0, 0, 1)">
    spec:
      containers:
      - name: dashboard-metrics-scraper
          image: kubernetesui/metrics-scraper:v1.0.3
          ports:
            - containerPort: 8000
            protocol: TCP
          livenessProbe:
            httpGet:
            scheme: HTTP
            path: /
            port: 8000
            initialDelaySeconds: 30
            timeoutSeconds: 30
          volumeMounts:
          - mountPath: /tmp
            name: tmp-volume
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            runAsUser: 1001
            runAsGroup: 2001
      serviceAccountName: kubernetes-dashboard
      nodeSelector:
      "beta.kubernetes.io/os": linux
      # Comment the following tolerations if Dashboard must not be deployed on master
      tolerations:
      - key: node-role.kubernetes.io/master
          effect: NoSchedule
      volumes:
      - name: tmp-volume
          emptyDir: {}</span></pre>
</div>
<span class="cnblogs_code_collapse">yaml文件</span></div>
<p>运行结果</p>
<p><img alt="" data-src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408112942257-1540340005.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>复制地址进入http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/</p>
<p>&nbsp;<img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408113011981-533045088.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>生成Token</p>
<div class="cnblogs_code">
<pre>$TOKEN=((kubectl -n kube-system describe secret <span style="color: rgba(0, 0, 255, 1)">default</span> | Select-String "token:") -split " +")
kubectl config set</span>-credentials docker-<span style="color: rgba(0, 0, 255, 1)">for</span>-desktop --token="${TOKEN}"<span style="color: rgba(0, 0, 0, 1)">
echo $TOKEN</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408113111118-230600064.png"></p>
<p>&nbsp;</p>
<p>设置了token后,最后进入到页面中</p>
<p><img src="https://img2020.cnblogs.com/blog/299612/202004/299612-20200408113125258-741319259.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>还有其他关于ingress和helm的,可以参考github仓库https://github.com/AliyunContainerService/k8s-for-docker-desktop</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/weschen/p/12658839.html
頁: [1]
查看完整版本: Docker Desktop启动Kubernetes