k8s部署

● ·基础环境部署
○ 1)前期准备(所有节点)
○ 2)安装容器 docker(所有节点)
○ 3)配置 k8s yum 源(所有节点)
○ 4)将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源(所有节点)
○ 5)配置 containerd cgroup 驱动程序 systemd(所有节点)
○ 6)开始安装 kubeadm,kubelet 和 kubectl(master 节点)
○ 7)使用 kubeadm 初始化集群(master 节点)
○ 8)安装 Pod 网络插件(CNI:Container Network Interface)(master)
○ 9)node 节点加入 k8s 集群

1)开始
声明:
双master双node(如果需要集群高可用那么master最少三台 当有两台中宕机一台etcd集群崩溃,整个k8s集群也不能正常对外服务。)(k8s集群的master节点部署是为单数的例如:1,3,5,7…)
192.168.50.6 k8s-master
192.168.50.9 k8s-master2
192.168.50.7 k8s-node
192.168.50.8 k8s-node2
这里先部署1个master和2个node节点 master2后面加入进去

修改主机名和配置hosts(所有节点):
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node
hostnamectl set-hostname k8s-node2

cat >> /etc/hosts<<EOF
192.168.50.6 k8s-master
192.168.50.7 k8s-node
192.168.50.8 k8s-node2
EOF

配置ssh互相通信(在master1配置即可 然后在master1 ssh-copy给后面的master和node节点):
ssh-keygen #一直回车
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-master
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node2

时间同步(所有节点):
yum install chrony -y
systemctl enable chronyd --now
chronyc sources

防火墙和selinux关闭(所有节点):
systemctl stop firewalld
systemctl disable firewalld

临时关闭

setenforce 0

永久禁用

sed -i ‘s/^SELINUX=enforcing$/SELINUX=disabled/’ /etc/selinux/config

关闭swap分区(所有节点):

临时关闭;关闭swap主要是为了性能考虑

swapoff -a

可以通过这个命令查看swap是否关闭了

free

永久关闭

sed -ri ‘s/.swap./#&/’ /etc/fstab

允许 iptables 检查桥接流量(可选,所有节点)
若要显式加载此模块,请运行 sudo modprobe br_netfilter,通过运行 lsmod | grep br_netfilter 来验证 br_netfilter 模块是否已加载
modprobe br_netfilter
lsmod | grep br_netfilter

为了让 Linux 节点的 iptables 能够正确查看桥接流量,请确认 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 设置为 1。
例如:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

设置所需的 sysctl 参数,参数在重新启动后保持不变

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

应用 sysctl 参数而不重新启动

sysctl --system
2)安装容器 docker(所有节点)

配置yum源

cd /etc/yum.repos.d ; mkdir bak; mv C* bak/

centos7

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

centos8

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

安装yum-config-manager配置工具

yum -y install yum-utils

设置yum源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker-ce版本

yum install -y docker-ce

开机自启 并启动

systemctl enable docker --now

查看版本号

docker --version

查看版本具体信息

docker version

Docker镜像源设置

修改文件 /etc/docker/daemon.json,没有这个文件就创建

添加以下内容后,重启docker服务:

cat >/etc/docker/daemon.json<<EOF
{
“registry-mirrors”: [“http://hub-mirror.c.163.com”]
}
EOF

加载

systemctl reload docker
#加载后可通过docker info 查看是否更换了源

查看

systemctl status docker containerd
dockerd 实际真实调用的还是 containerd 的 api 接口,containerd 是 dockerd 和 runC 之间的一个中间交流组件。所以启动 docker 服务的时候,也会启动 containerd 服务的。
3)配置 k8s yum 源(所有节点)
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[k8s]
name=k8s
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
EOF

4)将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源(所有节点)

导出默认配置,config.toml这个文件默认是不存在的

containerd config default > /etc/containerd/config.toml
grep sandbox_image /etc/containerd/config.toml
sed -i “s#registry.k8s.io/pause:3.6#registry.aliyuncs.com/google_containers/pause#g” /etc/containerd/config.toml
grep sandbox_image /etc/containerd/config.toml

5)配置 containerd cgroup 驱动程序 systemd(所有节点)
kubernets 自v 1.24.0 后,就不再使用 docker.shim,替换采用 containerd 作为容器运行时端点。因此需要安装 containerd(在 docker 的基础下安装),上面安装 docker 的时候就自动安装了 containerd 了。这里的 docker 只是作为客户端而已。容器引擎还是 containerd。

sed -i ‘s#SystemdCgroup = false#SystemdCgroup = true#g’ /etc/containerd/config.toml

应用所有更改后,重新启动containerd

systemctl restart containerd

或者:
vi /etc/docker/daemon.json

{
“exec-opts”:[“native.cgroupdriver=systemd”]
}

systemctl daemon-reload
systemctl restart docker

什么是cgroups?
首先说下容器是什么?容器是一个视图隔离、资源可限制、独立文件系统的进程集合。cgroups(Control Groups) 是 linux 内核提供的一种机制,作用就是可以对资源进行限制。此外,视图隔离是通过namespace实现,而文件系统是通过chroot实现。

为什么要修改Cgroup Driver
Docker默认的Cgroup Driver是cgroupfs,而Kubernetes 推荐使用 systemd 来代替 cgroupfs。如果不修改,那么同时运行有两个cgroup控制管理器,当资源有压力的情况时,有可能出现不稳定的情况。并且在kubeadm init时也会出现警告。

6)开始安装 kubeadm,kubelet 和 kubectl(master 节点)

不指定版本就是最新版本,当前版本为1.24.1

yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1 --disableexcludes=kubernetes

disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库

设置为开机自启并现在立刻启动服务 --now:立刻启动服务

systemctl enable --now kubelet

查看状态,这里需要等待一段时间再查看服务状态,启动会有点慢

systemctl status kubelet

查看日志,发现有报错,报错如下:
kubelet.service: Main process exited, code=exited, status=1/FAILURE kubelet.service: Failed with result ‘exit-code’.

【解释】重新安装(或第一次安装)k8s,未经过 kubeadm init 或者 kubeadm join 后,kubelet 会不断重启,这个是正常现象……,执行 init 或 join 后问题会自动解决,对此官网有如下描述,也就是此时不用理会 kubelet.service。
查看版本
kubectl version
yum info kubeadm

7)使用 kubeadm 初始化集群(在一个master 节点即可)
最好提前把镜像下载好,这样安装快
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.24.1
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.24.1
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.24.1
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.24.1
docker pull registry.aliyuncs.com/google_containers/pause:3.7
docker pull registry.aliyuncs.com/google_containers/etcd:3.5.3-0
docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.6

集群初始化
kubeadm init
–apiserver-advertise-address=192.168.50.6
–image-repository registry.aliyuncs.com/google_containers
–control-plane-endpoint=cluster-endpoint
–kubernetes-version v1.24.1
–service-cidr=10.1.0.0/16
–pod-network-cidr=10.244.0.0/16
–v=5

–image-repository string: 这个用于指定从什么位置来拉取镜像(1.13版本才有的),默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers

–kubernetes-version string: 指定kubenets版本号,默认值是stable-1,会导致从https://dl.k8s.io/release/stable-1.txt下载最新的版本号,我们可以将其指定为固定版本(v1.22.1)来跳过网络请求。

–apiserver-advertise-address 指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。这里的ip为master节点ip,记得更换。

–pod-network-cidr 指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。

–control-plane-endpoint=cluster-endpoint:–control-plane-endpoint 参数意义为可以将单master集群后期转换为多master以及高可用集群,如果现在初始化不指定该参数 那么后期 只可以往集群中添加node节点,不可以再添加master控制节点,那么就实现不了双master;cluster-endpoint:是映射到该 IP 的自定义 DNS 名称,这里配置hosts映射:192.168.50.6 cluster-endpoint。 这将允许你将 --control-plane-endpoint=cluster-endpoint 传递给 kubeadm init,并将相同的 DNS 名称传递给 kubeadm join。 稍后你可以修改 cluster-endpoint 以指向高可用性方案中的负载均衡器的地址,就是说如果后期需要做高可用等 直接将hosts文件的文件ip改为高可用的VIP虚拟ip即可

#因为现在并没有做高可用那么也没有VIP 那么现在指定成master的ip即可 后面做高可用 有vip后 直接更改ip即可
(后面节点加入集群时 也需要在各节点hosts文件中添加该信息 即 ip 对应cluster-endpoint)

重置再初始化
#上面成功则不用进行 这里介绍怎么重置再进行一遍初始化
kubeadm reset
rm -fr ~/.kube/

配置环境变量
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config

临时生效(退出当前窗口重连环境变量失效)

export KUBECONFIG=/etc/kubernetes/admin.conf

永久生效(推荐)

echo “export KUBECONFIG=/etc/kubernetes/admin.conf” >> ~/.bash_profile
source ~/.bash_profile

发现节点还是有问题,查看日志 /var/log/messages
“Container runtime network not ready” networkReady=“NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized”

接下来就是安装 Pod 网络插件
8)安装 Pod 网络插件(CNI:Container Network Interface)(master)
你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。

最好提前下载镜像(所有节点)

docker pull quay.io/coreos/flannel:v0.14.0

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#如果这里apply失败可去浏览器搜索域名对应的ip 搜索raw.githubusercontent.com对应的ip 然后写进hosts文件即可:
185.199.108.133 raw.githubusercontent.com #根据实际搜索的ip填写
#如果上面安装失败,则下载我百度里的,离线安装
链接:https://pan.baidu.com/s/1HB9xuO3bssAW7v5HzpXkeQ
提取码:8888
#再查看 node 节点,就已经正常了

9)master和node 节点加入 k8s 集群
现在是先将node节点添加到集群中:

先安装 kubelet
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

设置为开机自启并现在立刻启动服务 --now:立刻启动服务

systemctl enable --now kubelet
systemctl status kubelet

如果没有令牌,可以通过在控制平面节点上运行以下命令来获取令牌:
kubeadm token list

默认情况下,令牌会在24小时后过期。如果要在当前令牌过期后将节点加入集群, 则可以通过在控制平面节点上运行以下命令来创建新令牌:
kubeadm token create

再查看

kubeadm token list

如果你没有 –discovery-token-ca-cert-hash 的值,则可以通过在控制平面节点上执行以下命令链来获取它:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed ‘s/^.* //’

如果执行 kubeadm init 时没有记录下加入集群的命令,可以通过以下命令重新创建(推荐)一般不用上面的分别获取 token 和 ca-cert-hash 方式,执行以下命令一气呵成:
kubeadm token create --print-join-command

这里需要等待一段时间,再查看节点节点状态,因为需要安装 kube-proxy 和 flannel。
如果加入失败 查看node节点的hosts文件是否有添加 ip对应cluster-endpoint

kubectl get pods -A
kubectl get nodes

#如果在长时间在master查看node节点为NotReady状态 可查看node节点的kubelet服务的状态 如果出现该报错
journalctl -f -u kubelet.service:查看详细日志

查看master是否安装flanner:kubectl get pods -A
如果没有安装执行那么可能上面 flanner没有成功 :
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
相关链接:https://www.cnblogs.com/l-hh/p/14989850.html

现在将另外的master节点添加到集群中形成双master双node
1、修改主机名和配置 hosts 注意别忘记在其他节点添加master2的ip
所有节点都统一如下配置:

在192.168.50.9执行

hostnamectl set-hostname k8s-master2

配置 hosts(所有节点的hosts文件添加关于master2的)
cat >> /etc/hosts<<EOF
192.168.50.6 k8s-master
192.168.50.7 k8s-node
192.168.50.8 k8s-node2
192.168.50.9 k8s-master2
EOF

2、配置 ssh 互信(在master1进行 ssh-copy到master2)

直接一直回车就行

ssh-keygen
在master1上面免密现在要添加的master2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-master2
3、时间同步
yum install chrony -y
systemctl start chronyd
systemctl enable chronyd
chronyc sources

7、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

4、关闭 swap

临时关闭;关闭swap主要是为了性能考虑

swapoff -a

可以通过这个命令查看swap是否关闭了

free

永久关闭

sed -ri ‘s/.swap./#&/’ /etc/fstab

5、禁用 SELinux

临时关闭

setenforce 0

永久禁用

sed -i ‘s/^SELINUX=enforcing$/SELINUX=disabled/’ /etc/selinux/config

6、允许 iptables 检查桥接流量
若要显式加载此模块,请运行 sudo modprobe br_netfilter,通过运行 lsmod | grep br_netfilter 来验证 br_netfilter 模块是否已加载,
sudo modprobe br_netfilter
lsmod | grep br_netfilter

为了让 Linux 节点的 iptables 能够正确查看桥接流量,请确认 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 设置为 1。例如:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

设置所需的 sysctl 参数,参数在重新启动后保持不变

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

应用 sysctl 参数而不重新启动

sudo sysctl --system

7、安装容器 docker
提示:v1.24 之前的 Kubernetes 版本包括与 Docker Engine 的直接集成,使用名为 dockershim 的组件。这种特殊的直接整合不再是 Kubernetes 的一部分 (这次删除被作为 v1.20 发行版本的一部分宣布)。你可以阅读检查 Dockershim 弃用是否会影响你 以了解此删除可能会如何影响你。要了解如何使用 dockershim 进行迁移,请参阅从 dockershim 迁移。

配置yum源

cd /etc/yum.repos.d ; mkdir bak; mv CentOS-Linux-* bak/

centos7

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

centos8

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

安装yum-config-manager配置工具

yum -y install yum-utils

设置yum源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker-ce版本

yum install -y docker-ce

启动

systemctl start docker

开机自启

systemctl enable docker

查看版本号

docker --version

查看版本具体信息

docker version

Docker镜像源设置

修改文件 /etc/docker/daemon.json,没有这个文件就创建

添加以下内容后,重启docker服务:

cat >/etc/docker/daemon.json<<EOF
{
“registry-mirrors”: [“http://hub-mirror.c.163.com”]
}
EOF

加载

systemctl reload docker

查看

systemctl status docker containerd

【温馨提示】dockerd 实际真实调用的还是 containerd 的 api 接口,containerd 是 dockerd 和 runC 之间的一个中间交流组件。所以启动 docker 服务的时候,也会启动 containerd 服务的。
8、配置 k8s yum 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[k8s]
name=k8s
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
EOF

9、将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源

导出默认配置,config.toml这个文件默认是不存在的

containerd config default > /etc/containerd/config.toml
grep sandbox_image /etc/containerd/config.toml
sed -i “s#k8s.gcr.io/pause#registry.aliyuncs.com/google_containers/pause#g” /etc/containerd/config.toml
grep sandbox_image /etc/containerd/config.toml

10、配置 containerd cgroup 驱动程序 systemd
kubernets 自v 1.24.0 后,就不再使用 docker.shim,替换采用 containerd 作为容器运行时端点。因此需要安装 containerd(在 docker 的基础下安装),上面安装 docker 的时候就自动安装了 containerd 了。这里的 docker 只是作为客户端而已。容器引擎还是 containerd。
sed -i ‘s#SystemdCgroup = false#SystemdCgroup = true#g’ /etc/containerd/config.toml

应用所有更改后,重新启动containerd

systemctl restart containerd

11、开始安装 kubeadm,kubelet 和 kubectl(master 节点)

不指定版本就是最新版本,当前最新版就是1.24.1

yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1 --disableexcludes=kubernetes

disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库

设置为开机自启并现在立刻启动服务 --now:立刻启动服务

systemctl enable --now kubelet

查看状态,这里需要等待一段时间再查看服务状态,启动会有点慢

systemctl status kubelet

查看版本

kubectl version
yum info kubeadm

12、加入 k8s 集群 master2加入集群 和node节点加入集群不同 他会多参数

需要证书 如果证书过期了,可以使用下面命令生成新证书上传,这里会打印出certificate key,后面会用到

kubeadm init phase upload-certs --upload-certs

你还可以在 【init】初始化期间指定自定义的 --certificate-key,以后可以由 join 使用。 要生成这样的密钥,可以使用以下命令(这里不执行,就用上面那个自命令就可以了):

kubeadm certs certificate-key

#打印添加集群命令
kubeadm token create --print-join-command

kubeadm join cluster-endpoint:6443 --token zlo8l3.42y89qtcl6o9o2xu --discovery-token-ca-cert-hash sha256:e6711525066855b6e57608cf4f5b8c349de870941726bde9f1b59d7c0e97bb9f --control-plane --certificate-key 3ea721374a85a2703649b4141b98677754eac8b1d9f98b3aaab78fca257d2f96

–control-plane 标志通知 kubeadm join 创建一个新的控制平面。加入master必须加这个标记

–certificate-key … 将导致从集群中的 kubeadm-certs Secret 下载控制平面证书并使用给定的密钥进行解密。这里的值就是上面这个命令(kubeadm init phase upload-certs --upload-certs)打印出的key。

#如果加入超时 hosts文件是否修改

根据提示执行如下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config
echo “export KUBECONFIG=/etc/kubernetes/admin.conf” >> ~/.bash_profile
source ~/.bash_profile
查看
kubectl get nodes
kubectl get pods -A -owide

现在的场景是双master双node集群

k8s 管理平台 dashboard 环境部署
1)dashboard 部署
GitHub 地址:https://github.com/kubernetes/dashboard

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.0/aio/deploy/recommended.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.0/aio/deploy/recommended.yaml
kubectl get pods -n kubernetes-dashboard
但是这个只能内部访问,所以要外部访问,要么部署 ingress,要么就是设置 service NodePort 类型。这里选择 service 暴露端口。
修改后的内容如下:
# Copyright 2017 The Kubernetes Authors.

# Licensed under the Apache License, Version 2.0 (the “License”);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

#     http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an “AS IS” BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: v1
kind: Namespace
metadata:
  name: kubernetes-dashboard


apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard


kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 31443
  selector:
    k8s-app: kubernetes-dashboard


apiVersion: v1
kind: Secret
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-certs
  namespace: kubernetes-dashboard
type: Opaque


apiVersion: v1
kind: Secret
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-csrf
  namespace: kubernetes-dashboard
type: Opaque
data:
  csrf: “”


apiVersion: v1
kind: Secret
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-key-holder
  namespace: kubernetes-dashboard
type: Opaque


kind: ConfigMap
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-settings
  namespace: kubernetes-dashboard


kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
rules:
  # Allow Dashboard to get, update and delete Dashboard exclusive secrets.
  - apiGroups: [“”]
    resources: [“secrets”]
    resourceNames: [“kubernetes-dashboard-key-holder”, “kubernetes-dashboard-certs”, “kubernetes-dashboard-csrf”]
    verbs: [“get”, “update”, “delete”]
    # Allow Dashboard to get and update ‘kubernetes-dashboard-settings’ config map.
  - apiGroups: [“”]
    resources: [“configmaps”]
    resourceNames: [“kubernetes-dashboard-settings”]
    verbs: [“get”, “update”]
    # Allow Dashboard to get metrics.
  - apiGroups: [“”]
    resources: [“services”]
    resourceNames: [“heapster”, “dashboard-metrics-scraper”]
    verbs: [“proxy”]
  - apiGroups: [“”]
    resources: [“services/proxy”]
    resourceNames: [“heapster”, “http:heapster:”, “https:heapster:”, “dashboard-metrics-scraper”, “http:dashboard-metrics-scraper”]
    verbs: [“get”]


kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
rules:
  # Allow Metrics Scraper to get metrics from the Metrics server
  - apiGroups: [“metrics.k8s.io”]
    resources: [“pods”, “nodes”]
    verbs: [“get”, “list”, “watch”]


apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: kubernetes-dashboard
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard


apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubernetes-dashboard
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard


kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
    spec:
      securityContext:
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: kubernetes-dashboard
          image: kubernetesui/dashboard:v2.6.0
          imagePullPolicy: Always
          ports:
            - containerPort: 8443
              protocol: TCP
          args:
            - --auto-generate-certificates
            - --namespace=kubernetes-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 if the default does not work.
            # - --apiserver-host=http://my-address:port
          volumeMounts:
            - name: kubernetes-dashboard-certs
              mountPath: /certs
              # Create on-disk volume to store exec logs
            - mountPath: /tmp
              name: tmp-volume
          livenessProbe:
            httpGet:
              scheme: HTTPS
              path: /
              port: 8443
            initialDelaySeconds: 30
            timeoutSeconds: 30
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            runAsUser: 1001
            runAsGroup: 2001
      volumes:
        - name: kubernetes-dashboard-certs
          secret:
            secretName: kubernetes-dashboard-certs
        - name: tmp-volume
          emptyDir: {}
      serviceAccountName: kubernetes-dashboard
      nodeSelector:
        “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


kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: dashboard-metrics-scraper
  name: dashboard-metrics-scraper
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 8000
      targetPort: 8000
  selector:
    k8s-app: dashboard-metrics-scraper


kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    k8s-app: dashboard-metrics-scraper
  name: dashboard-metrics-scraper
  namespace: kubernetes-dashboard
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: dashboard-metrics-scraper
  template:
    metadata:
      labels:
        k8s-app: dashboard-metrics-scraper
    spec:
      securityContext:
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: dashboard-metrics-scraper
          image: kubernetesui/metrics-scraper:v1.0.8
          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:
        “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: {}

重新部署
kubectl delete -f recommended.yaml
kubectl apply -f recommended.yaml
kubectl get svc,pods -n kubernetes-dashboard

2)创建登录用户
cat >ServiceAccount.yaml<<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:

  • kind: ServiceAccount
    name: admin-user
    namespace: kubernetes-dashboard
    EOF

kubectl apply -f ServiceAccount.yaml
创建并获取登录 token
kubectl -n kubernetes-dashboard create token admin-user
3)配置Windows的 hosts 登录 dashboard web
192.168.50.6 cluster-endpoint
登录:https://cluster-endpoint:31443
#:如果是windows电脑浏览器访问 因为这里是并非正式环境 这里的 ip对应的域名是私网ip 域名也是非解析的 所以在windows电脑访问 这里还是访问ip 不然要更改windows电脑的hosts文件 才能在浏览器访问该域名

输入上面创建的 token 登录

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值