Ubuntu18.04.1上安装k8s1.20的简明教程

797 阅读5分钟

安装 kubernetes

k8s官网

#查看系统
honglei@k8s-master-ubuntu:~$ uname -a
Linux k8s-master-ubuntu 5.4.0-58-generic #64~18.04.1-Ubuntu SMP Wed Dec 9 17:11:11 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

准备开始

  • 一台或多台运行着下列系统的机器:
    • Ubuntu 16.04+
    • Debian 9+
    • CentOS 7
    • Red Hat Enterprise Linux (RHEL) 7
    • Fedora 25+
    • HypriotOS v1.0.1+
    • Container Linux (测试 1800.6.0 版本)
  • 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响您应用的运行内存)
  • 2 CPU 核或更多
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里 了解更多详细信息。
  • 开启机器上的某些端口。请参见这里 了解更多详细信息。
  • 禁用交换分区。为了保证 kubelet 正常工作,您 必须 禁用交换分区。

关闭防火墙、swap

需要关闭所有主机的防火墙

sudo ufw disable

需要关闭所有主机的关闭 swap

Kubernetes 1.8开始要求必须禁用Swap,如果不关闭,默认配置下kubelet将无法启动。将 /etc/fstab 中的这一行注释掉

root@master:/etc/docker# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=d1cc0144-5acb-4e88-95f5-965ce4d0bc30 /               ext4    errors=remount-ro 0       1
#/swapfile                                 none            swap    sw              0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0
#执行
sudo swapoff -a

Ubuntu中的root帐号

Ubuntu中的root帐号默认是被禁用了的,所以登陆的时候没有这个账号

打开终端开启root账户

sudo passwd -u root
#设置root密码,输入两次
sudo passwd   root
#切换root账号
su -
#退出root账户
exit

确保每个节点上 MAC 地址和 product_uuid 的唯一性

  • 您可以使用命令 ip linkifconfig -a 来获取网络接口的 MAC 地址
  • 可以使用 sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验

一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。Kubernetes 使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装失败

检查网络适配器

如果您有一个以上的网络适配器,同时您的 Kubernetes 组件通过默认路由不可达,我们建议您预先添加 IP 路由规则,这样 Kubernetes 集群就可以通过对应的适配器完成连接。

确保 iptables 工具不使用 nftables 后端

在 Linux 中,nftables 当前可以作为内核 iptables 子系统的替代品。 iptables 工具可以充当兼容性层,其行为类似于 iptables 但实际上是在配置 nftables。 nftables 后端与当前的 kubeadm 软件包不兼容:它会导致重复防火墙规则并破坏 kube-proxy

如果您系统的 iptables 工具使用 nftables 后端,则需要把 iptables 工具切换到“旧版”模式来避免这些问题。 默认情况下,至少在 Debian 10 (Buster)、Ubuntu 19.04、Fedora 29 和较新的发行版本中会出现这种问题。RHEL 8 不支持切换到旧版本模式,因此与当前的 kubeadm 软件包不兼容。

update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
update-alternatives --set arptables /usr/sbin/arptables-legacy
update-alternatives --set ebtables /usr/sbin/ebtables-legacy

修改主机名、更新host

sudo vi /etc/hostname
#修改完hostname以后,建议同时修改下/etc/hosts:
sudo  vi /etc/hosts
#/etc/hosts存放的是域名和ip的对应关系,域名和主机名并没有直接关系,可以为一个ip指定任意对应名称,但是建议解析一个ip对应hostname。

#在 master 的 /etc/hosts 中进行如下修改:
192.168.39.3 master
192.168.39.4 node1
192.168.39.5 node2
#在 node1 的 /etc/hosts 中进行如下修改:
192.168.39.3 master
192.168.39.4 node1
192.168.39.5 node2
#在 node2 的 /etc/hosts 中进行如下修改:
192.168.39.3 master
192.168.39.4 node1
192.168.39.5 node2

安装 runtime

从 v1.6.0 版本起,Kubernetes 开始默认允许使用 CRI(容器运行时接口)。

从 v1.14.0 版本起,kubeadm 将通过观察已知的 UNIX 域套接字来自动检测 Linux 节点上的容器运行时。 下表中是可检测到的正在运行的 runtime 和 socket 路径。

运行时域套接字
Docker/var/run/docker.sock
containerd/run/containerd/containerd.sock
CRI-O/var/run/crio/crio.sock

如果同时检测到 docker 和 containerd,则优先选择 docker。 这是必然的,因为 docker 18.09 附带了 containerd 并且两者都是可以检测到的。 如果检测到其他两个或多个运行时,kubeadm 将以一个合理的错误信息退出。

在非 Linux 节点上,默认使用 docker 作为容器 runtime。

如果选择的容器 runtime 是 docker,则通过内置 dockershim CRI 在 kubelet 的内部实现其的应用。

基于 CRI 的其他 runtimes 有:

请参考 CRI 安装指南获取更多信息。

安装Docker

在你每个节点(所有主机)上安装 Docker CE.

Kubernetes 发行说明中列出了 Docker 的哪些版本与该版本的 Kubernetes 相兼容。

在你的操作系统上使用如下命令安装 Docker:

# (安装 Docker CE)
## 设置仓库:
### 安装软件包以允许 apt 通过 HTTPS 使用存储库
sudo apt-get update && sudo apt-get install -y \
  apt-transport-https ca-certificates curl software-properties-common gnupg2

### 新增 Docker 的官方 GPG 秘钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#如果上面的地址不能下载,可以使用国内镜像
### 新增 Docker 的 中国科学技术大学 GPG 秘钥:
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg  | sudo apt-key add -

### 添加 Docker apt 仓库:
sudo add-apt-repository \
  "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) \
  stable"

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

## 安装 Docker CE
sudo apt-get update && sudo apt-get install -y \
  containerd.io=1.2.13-2 \
  docker-ce=5:19.03.11~3-0~ubuntu-$(lsb_release -cs) \
  docker-ce-cli=5:19.03.11~3-0~ubuntu-$(lsb_release -cs)
#或者下面的命令安装也是一样的。
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io  

#kubernetes 官方建议 docker 驱动采用 systemd,当然可以不修改,只是kubeadm init时会有warning提示
# 设置 Docker daemon
cat <<EOF | sudo tee /etc/docker/daemon.conf
{
 "registry-mirrors": [
    "https://dr6xf1z7.mirror.aliyuncs.com",
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

# Create /etc/systemd/system/docker.service.d
sudo mkdir -p /etc/systemd/system/docker.service.d

# 重启 docker.
sudo systemctl daemon-reload
sudo systemctl restart docker
#查看信息
docker version
docker info | grep "Cgroup Driver"

如果你想开机即启动 docker 服务,执行以下命令:

sudo systemctl enable docker

请参阅 官方 Docker 安装指南 来获取更多的信息。

安装 kubeadm、kubelet 和 kubectl

您需要在每台机器上安装以下的软件包:

  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动 pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。

kubeadm 不能 帮您安装或者管理 kubeletkubectl,所以您需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 间的相差一个次要版本不一致是支持的,但 kubelet 的版本不可以超过 API 服务器的版本。 例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。

有关安装 kubectl 的信息,请参阅安装和设置 kubectl文档。

警告:

这些指南不包括系统升级时使用的所有 Kubernetes 程序包。这是因为 kubeadm 和 Kubernetes 有特殊的升级注意事项

添加阿里源

由于国外网站访问较慢容易卡死,所以需要添加源。

/etc/apt/sources.list 中添加:

vi /etc/apt/sources.list
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

添加源的 key :

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

更新源:

sudo apt-get update

开始安装

sudo apt-get install -y kubelet kubeadm kubectl

#查看版本号:
root@master:/etc/docker# kubelet --version
Kubernetes v1.20.0
root@master:/etc/docker# 

启动 kubelet

systemctl start kubelet
# 如果你想开机即启动 docker 服务,执行以下命令
sudo systemctl enable kubelet

部署(master)节点

查看 kubernetes 所需镜像列表

#取最新版所需镜像列表
root@master:/etc/docker# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.20.1
k8s.gcr.io/kube-controller-manager:v1.20.1
k8s.gcr.io/kube-scheduler:v1.20.1
k8s.gcr.io/kube-proxy:v1.20.1
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0

执行 init

kubeadm init --kubernetes-version=v1.20.0 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
#当出现如下内容时**(要保存下来,后边有用)**,执行成功:
kubeadm join 192.168.39.3:6443 --token 973slm.bl1aa33bx0wns5sj \
    --discovery-token-ca-cert-hash sha256:9ca9b8eb33e291f83acc2245d919443431692be5ab8527bd8cf58f57c5a18be5 

失败重试

若执行失败,可执行如下命令,清除执行 init 产生的垃圾

kubeadm reset
rm -rf /etc/kubernetes

root 用户

Alternatively, if you are the root user, you can run:

export KUBECONFIG=/etc/kubernetes/admin.conf

非root用户操作 kubectl

部署成功后,如果我们想使用非root用户操作 kubectl,可以使用以下命令,这也是 kubeadm init 输出的一部分

不然会报: The connection to the server localhost:8080 was refused

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

node节点执行join

在node节点执行命令

kubeadm join 192.168.39.3:6443 --token 973slm.bl1aa33bx0wns5sj \
    --discovery-token-ca-cert-hash sha256:9ca9b8eb33e291f83acc2245d919443431692be5ab8527bd8cf58f57c5a18be5 

join过程

root@node2:/# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
root@node2:/etc/apt# kubeadm join 192.168.39.3:6443 --token 973slm.bl1aa33bx0wns5sj \
>     --discovery-token-ca-cert-hash sha256:9ca9b8eb33e291f83acc2245d919443431692be5ab8527bd8cf58f57c5a18be5
[preflight] Running pre-flight checks
	[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

查看节点状态

master 节点查看节点状态:

#可以看到所有节点都处于 未就绪 状态。
root@master:/# kubectl get nodes
NAME     STATUS     ROLES                  AGE   VERSION
master   NotReady   control-plane,master   24m   v1.20.0
node1    NotReady   <none>                 14s   v1.20.0
node2    NotReady   <none>                 24s   v1.20.0

安装 Pod 网络附加组件

注意:

本节包含有关网络设置和部署顺序的重要信息。 在继续之前,请仔细阅读所有建议。

你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。 在安装网络之前,集群 DNS (CoreDNS) 将不会启动。

  • 注意你的 Pod 网络不得与任何主机网络重叠: 如果有重叠,你很可能会遇到问题。 (如果你发现网络插件的首选 Pod 网络与某些主机网络之间存在冲突, 则应考虑使用一个合适的 CIDR 块来代替, 然后在执行 kubeadm init 时使用 --pod-network-cidr 参数并在你的网络插件的 YAML 中替换它)。
  • 默认情况下,kubeadm 将集群设置为使用和强制使用 RBAC(基于角色的访问控制)。 确保你的 Pod 网络插件支持 RBAC,以及用于部署它的 manifests 也是如此。
  • 如果要为集群使用 IPv6(双协议栈或仅单协议栈 IPv6 网络), 请确保你的Pod网络插件支持 IPv6。 IPv6 支持已在 CNI v0.6.0 版本中添加。

说明: 目前 Calico 是 kubeadm 项目中执行 e2e 测试的唯一 CNI 插件。 如果你发现与 CNI 插件相关的问题,应在其各自的问题跟踪器中记录而不是在 kubeadm 或 kubernetes 问题跟踪器中记录。

Kubernetes 网络模型 的附加组件列表

Flannel 是一个非常简单的能够满足 Kubernetes 所需要的覆盖网络。已经有许多人报告了使用 Flannel 和 Kubernetes 的成功案例。

你可以使用以下命令在控制平面节点或具有 kubeconfig 凭据的节点上安装 Pod 网络附加组件:

#搭建 flannel 网络集群,原文内容在:https://github.com/coreos/flannel#flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#每个集群只能安装一个 Pod 网络。

执行过程

root@master:/opt/k8syaml# kubectl apply -f kube-flannel.yml 
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
1234567
#这个过程比较,会下载几个quay.io/coreos/flannel镜像,请耐心等待下。
root@master:/opt/k8syaml# kubectl get pods --all-namespaces
NAMESPACE     NAME                             READY   STATUS    RESTARTS   AGE
kube-system   coredns-7f89b7bc75-7vwsj         1/1     Running   0          47m
kube-system   coredns-7f89b7bc75-sb9d2         1/1     Running   0          47m
kube-system   etcd-master                      1/1     Running   0          47m
kube-system   kube-apiserver-master            1/1     Running   0          47m
kube-system   kube-controller-manager-master   1/1     Running   0          47m
kube-system   kube-flannel-ds-8qd6j            1/1     Running   0          13m
kube-system   kube-flannel-ds-cwjpg            1/1     Running   0          13m
kube-system   kube-flannel-ds-ql9kn            1/1     Running   0          13m
kube-system   kube-proxy-hcgqb                 1/1     Running   0          24m
kube-system   kube-proxy-qbl9b                 1/1     Running   0          47m
kube-system   kube-proxy-t9zd9                 1/1     Running   0          24m
kube-system   kube-scheduler-master            1/1     Running   0          47m

此时再次查看节点状态,全部已就绪:

root@master:/opt/k8syaml# kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   49m   v1.20.0
node1    Ready    <none>                 25m   v1.20.0
node2    Ready    <none>                 25m   v1.20.0

如果出现以下报错:

Unable to connect to the server: read tcp 192.168.20.5:37246->151.101.228.133:443: read: connection reset by peer

可以安装 apt-get install ca-certificatesapt-get install ssl-cert 解决。

# 若是下载不了flannel镜像但是本地docker有的话, yml文件修改镜像源优先来源本地imagePullPolicy: IfNotPresent
# 获取镜像id
docker images
# 其中-o和>表示输出到文件  源镜像可使用镜像id或者镜像名(name:tag)
docker save ImagesId > /opt/flannel.tar
docker save -o /opt/flannelrar quay.io/coreos/flannel:v0.13.1-rc1
# 文件传输
scp flannel.tar root@192.168.146.131:/opt
# 需要镜像的机器上载入镜像 -i和<表示从文件输入
docker load -i /opt/flannel.tar
docker load < flannel.tar
# 若是镜像名不一致,则修改
docker tag ImagesId quay.io/coreos/flannel:v0.13.1-rc1

测试k8s集群

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
# 访问地址 http://NodeIp:Port

Dashboard UI

Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment,Job,DaemonSet 等等)。 例如,你可以对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。

Dashboard 同时展示了 Kubernetes 集群中的资源状态信息和所有报错信息

部署 Dashboard UI

部署 Dashboard UI

默认情况下不会部署 Dashboard。可以通过以下命令部署:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

虚拟机访问不了,可以在网页打开,在虚拟机内创建个文件,把内容copy进去,即可。

如果远程下载不了,可以本地加载镜像,在recommended.yaml中只需要在image下一行,加上:imagePullPolicy: IfNotPresent 意思是优先使用本地镜像。

root@master:/opt/k8syaml# vi recommended.yaml
root@master:/opt/k8syaml# kubectl apply -f recommended.yaml 
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

#查看所有的pod情况
root@master:/opt/k8syaml# kubectl get pod --all-namespaces 
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
kube-system            coredns-7f89b7bc75-7vwsj                     1/1     Running   0          14h
kube-system            coredns-7f89b7bc75-sb9d2                     1/1     Running   0          14h
kube-system            etcd-master                                  1/1     Running   0          14h
kube-system            kube-apiserver-master                        1/1     Running   0          14h
kube-system            kube-controller-manager-master               1/1     Running   0          14h
kube-system            kube-flannel-ds-8qd6j                        1/1     Running   0          14h
kube-system            kube-flannel-ds-cwjpg                        1/1     Running   0          14h
kube-system            kube-flannel-ds-ql9kn                        1/1     Running   0          14h
kube-system            kube-proxy-hcgqb                             1/1     Running   0          14h
kube-system            kube-proxy-qbl9b                             1/1     Running   0          14h
kube-system            kube-proxy-t9zd9                             1/1     Running   0          14h
kube-system            kube-scheduler-master                        1/1     Running   0          14h
kubernetes-dashboard   dashboard-metrics-scraper-79c5968bdc-49b5z   1/1     Running   0          142m
kubernetes-dashboard   kubernetes-dashboard-b8995f9f8-nvz8f         1/1     Running   0          142m
#查看没有启动的原因,可以看出,是一直在下载镜像
kubectl describe pod dashboard-metrics-scraper-7b59f7d4df-5vmn2 -n kubernetes-dashboard

有时候镜像下载比较慢,可以单独下载docker pull kubernetesui/metrics-scraper:v1.0.4 docker pull kubernetesui/dashboard:v2.0.0

访问 Dashboard UI

为了保护你的集群数据,默认情况下,Dashboard 会使用最少的 RBAC 配置进行部署。 当前,Dashboard 仅支持使用 Bearer 令牌登录。 要为此样本演示创建令牌,你可以按照 创建示例用户 上的指南进行操作。

kubernetes dashboard登录后,权限不够问题

创建一个群集管理服务帐户 在此步骤中,我们将为仪表板创建服务帐户并获取其凭据。

运行以下命令:

此命令将在默认名称空间中为仪表板创建服务帐户

kubectl create serviceaccount admin-user -n kubernetes-dashboard

将集群绑定规则添加到您的仪表板帐户

kubectl create clusterrolebinding admin-user -n kubernetes-dashboard  --clusterrole=cluster-admin  --serviceaccount=kubernetes-dashboard:admin-user

使用以下命令复制仪表板登录所需的令牌:

kubectl -n kubernetes-dashboard  describe secret admin-user | awk '$1=="token:"{print $2}'

# 更全信息
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

复制令牌,然后通过选择令牌选项将其粘贴到仪表板登录页面中

命令行代理

你可以使用 kubectl 命令行工具访问 Dashboard,命令如下:

kubectl proxy

kubectl 会使得 Dashboard 可以通过 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ 访问。

UI 只能 通过执行这条命令的机器进行访问。更多选项参见 kubectl proxy --help

#获取token,进行登录
kubectl describe secret admin-user -n kubernetes-dashboard

出现跨域问题

# 页面访问出现error trying to reach service: dial tcp 10.244.1.18:8443: connect: connectio
# 使用这个来解决:kubectl --namespace=kube-system port-forward <kubernetes-dashboard-podname> 8443
[root@master01 ~]kubectl -n kubernetes-dashboard get pod -o name | grep dashboard
pod/dashboard-metrics-scraper-6cd59dd9c7-tbh2h
pod/kubernetes-dashboard-5b9d976b79-7clvr
[root@master01 ~]kubectl --namespace=kubernetes-dashboard port-forward pod/kubernetes-dashboard-5b9d976b79-7clvr 8443
Forwarding from 127.0.0.1:8443 -> 8443
Forwarding from [::1]:8443 -> 8443

#访问地址
https://localhost:8443

Q&A

安装docker时,couldn’t be verified because the public key is not available

honglei@master:~$ sudo apt-get update && sudo apt-get install -y   apt-transport-https ca-certificates curl software-properties-common gnupg2
Hit:1 http://mirrors.aliyun.com/ubuntu bionic InRelease
Hit:2 http://mirrors.aliyun.com/ubuntu bionic-security InRelease                                                   
Hit:3 http://mirrors.aliyun.com/ubuntu bionic-updates InRelease                                                    
Hit:4 http://mirrors.aliyun.com/ubuntu bionic-backports InRelease                                                  
Hit:5 http://mirrors.aliyun.com/ubuntu bionic-proposed InRelease                                                   
Get:6 https://download.docker.com/linux/ubuntu bionic InRelease [64.4 kB]                                          
Err:6 https://download.docker.com/linux/ubuntu bionic InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
Reading package lists... Done
W: Skipping acquire of configured file 'multivers/source/Sources' as repository 'http://mirrors.aliyun.com/ubuntu bionic-backports InRelease' doesn't have the component 'multivers' (component misspelt in sources.list?)
W: GPG error: https://download.docker.com/linux/ubuntu bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
E: The repository 'https://download.docker.com/linux/ubuntu bionic InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
honglei@master:~$ 
12345678910111213141516

解决办法:

在sources.list添加下面这一条就可以:

deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable

#更新apt源:
apt-get  update

启动docker时Dec 19 20:33:46 master systemd[1]: docker.socket: Failed with result ‘service-start-limit-hit’.

#/etc/docker/daemon.json,修改daemon.json文件后缀为daemon.conf,才可以正常启动
mv daemon.json daemon.conf