4

在VMWare中部署你的K8S集群

 3 years ago
source link: https://jasonkayzk.github.io/2021/05/16/%E5%9C%A8VMWare%E4%B8%AD%E9%83%A8%E7%BD%B2%E4%BD%A0%E7%9A%84K8S%E9%9B%86%E7%BE%A4/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如果要学Kubernetes的话,怎么能够没有自己的Kubernetes集群呢?

本文从零开始,手把手教你搭建Kubernetes集群!

系列文章:

在VMWare中部署你的K8S集群

前言

在搭建K8S之前,我觉得K8S包含的组件这么多,应该相当复杂了吧(上一次搭建基本上是在三年前了);

但实际上,经过这几年各种折腾的打磨,发现并没有自己想象的那么难!

搭建的过程和通常的CentOS集群基本上类似,只是稍微多了几个东西而已;

如果对搭建CentOS集群不熟悉,建议可以先看一下我的这篇文章:

在搭建之前先说一下我的环境:

  • CPU:AMD Ryzen 7 3700X
  • 内存:32GB
  • 硬盘:NVMe Samsung SSD 970 500GB
  • 虚拟化:VMWare Pro 15.1.0 build-13591040
  • 操作系统镜像:CentOS-7-x86_64-Minimal-2009.iso

关于我们要搭建的K8S:

  • Docker版本:docker-ce-19.03.9;
  • K8S版本:1.20.2;
  • 三个节点:master、node1、node2(固定IP);
  • 容器运行时:仍然使用Docker而非Containerd;
  • Pod网络:用Calico替换Flannel实现 Pod 互通,支持更大规模的集群;
  • 集群构建工具:Kubeadm(这个没啥好说的吧);

关于网络配置:

  • 整体机器采用NAT地址转换;
  • 各台虚拟机采用固定IP地址;
  • 虚拟机VMWare统一网关地址:192.168.24.2;

具体IP地址分配如下:

主机名称 硬件配置 IP master CPU4核/内存4G 192.168.24.180 node1 CPU4核/内存4G 192.168.24.181 node2 CPU4核/内存4G 192.168.24.182

下面,我们就来动手搭建一个K8S集群吧!

创建合适的操作系统快照

先来说一下什么是合适的操作系统快照

由于VMWare中提供了快照功能,我们可以通过生成一个快照,并且克隆这个快照快速实现虚拟机倍增;但是,为了让我们克隆的机器可以直接加入集群,而非在克隆后还要修改克隆机大量配置,因此创建快照的内容想到关键;

我们应当在master机上进行网络配置、工具安装后再生成快照;

① 安装CentOS镜像

首先在镜像站下载CentOS-7-x86_64-Minima.iso,即最小的镜像文件;

然后在VMWare安装这个镜像,这里作为master机器;

具体镜像安装挺简单的,这里不再赘述了;

只贴一个配置:

  • 1个处理器4核
  • 40G硬盘SCSI
  • 网络:NAT
  • /boot:256M
  • swap:2G

在安装CentOS时可以不创建用户,但是一定要创建Root密码;

我这里创建的是:123456

② 配置网络

在网络配置中,我们要配置虚拟机为固定的IP地址,避免使用DCHP动态分配IP(否则每次IP都不同,乱套了!);

首先,安装完成后,有极大的可能是无法联网的(所以也不能使用yum安装);

首先需要修改配置vi /etc/sysconfig/network

$ vi /etc/sysconfig/network
# 添加下面的配置
+ NETWORKING=yes
+ HOSTNAME=master

还要修改vi /etc/sysconfig/network-scripts/ifcfg-ens33

$ vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 配置如下

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
-BOOTPROTO=dchp
+BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
-UUID=XXXX-XXXX-XXXX
-ONBOOT=no
+ONBOOT=yes
+IPADDR=192.168.24.180
+NETMASK=255.255.255.0
+GATEWAY=192.168.24.2
NAME=ens33
DEVICE=ens33
+DNS1=192.168.24.2
+DNS2=114.114.114.114

上面的配置主要是为了将网络修改为静态IP;

配置中的几个重点:

  • BOOTPROTO:修改为static,即静态IP;
  • IPADDR:静态的IP地址;
  • NETMASK:子网掩码,选择255.255.255.0即可;
  • GATEWAY:网关,结尾为.2,NAT分配的子网地址可在编辑→虚拟网络编辑器中查看;
  • DNS1、DNS2:DNS1可选择本机网关地址、DNS2可配置114.114.114.114等公共DNS;
  • UUID:删除;
  • ONBOOT:yes,开机启用网络(开启才能开机就联网);

需要注意的是:

在CentOS 6中,网络的配置文件是:

  • /etc/sysconfig/network-scripts/ifcfg-eth0

随后,配置hosts:

$ vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

+ 192.168.24.180 master
+ 192.168.24.181 node1
+ 192.168.24.182 node2

上述配置根据你实际情况修改;

配置完成后reboot;

reboot后登录,ping百度、qq等网站,成功则说明配置成功;

ping www.qq.com
PING ins-r23tsuuf.ias.tencent-cloud.net (221.198.70.47) 56(84) bytes of data.
64 bytes from www47.asd.tj.cn (221.198.70.47): icmp_seq=1 ttl=128 time=61.0 ms
64 bytes from www47.asd.tj.cn (221.198.70.47): icmp_seq=2 ttl=128 time=61.0 ms
64 bytes from www47.asd.tj.cn (221.198.70.47): icmp_seq=3 ttl=128 time=61.2 ms

③ 系统配置

系统配置主要是关闭防火墙、关闭swap、配置yum源等;

Ⅰ.关闭防火墙iptables

命令如下:

$ service iptables stop
$ systemctl disable iptables

注:有些机器可能没有iptables,这时候会提示:

  [root@master ~]# service iptables stop
  Redirecting to /bin/systemctl stop iptables.service
  Failed to stop iptables.service: Unit iptables.service not loaded.
  [root@master ~]# systemctl disable iptables
  Failed to execute operation: No such file or directory

不用理会,这样最好~


Ⅱ.禁用selinux

命令如下:

# 查看selinux
$ getenforce
Enforcing

# 关闭
$ vim /etc/selinux/config
# 修改为:disabled
SELINUX=disabled

Ⅲ.禁用防火墙firewalld

命令如下:

systemctl stop firewalld
systemctl disable firewalld

上面三步非常关键,如果防火墙没有关闭,会有各种各样的问题,导致机器中的节点无法正常通信(别问我是怎么知道的~)


Ⅳ.SSH登录配置
$ vim /etc/ssh/sshd_config
# 修改
UseDNS no

允许Root身份登录、允许空密码登录、是否允许使用密码认证:

PermitRootLogin yes #允许root登录
PermitEmptyPasswords no #不允许空密码登录
PasswordAuthentication yes # 设置是否使用口令验证

Ⅴ.关闭Swap空间

命令如下:

[root@master ~]# swapoff -a
[root@master ~]# sed -ie '/swap/ s/^/# /' /etc/fstab 
[root@master ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3770        1265        1304          12        1200        2267
Swap:             0           0           0

此步同样非常关键


Ⅵ.配置桥接流量

命令如下:

[root@k8s-master1 ~]# cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

Ⅶ.配置yum源

在安装软件前首先要配置yum源:

# 配置阿里云源
# 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 配置
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 生成缓存
yum makecache

# 安装epel库
yum -y install epel-release
yum -y update

随后,可通过yum安装vim、htop、ntp、net-tools、wget等软件;

④ 下载并配置软件

htop、vim、net-tools、wget直接通过yum install安装即可;

Ⅰ.时间同步ntp

下面讲述时间同步ntp配置:

安装ntp:

yum install ntp

配置ntp:

# 开启服务
$ service ntpd start

# 开机启动
$ systemctl enable ntpd

Ⅱ.安装Docker

Kubernetes默认的CRI(容器运行时)为Docker,因此先安装Docker;

首先,安装必要的一些系统工具:

yum install -y yum-utils device-mapper-persistent-data lvm2

随后,添加软件源信息:

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

替换下载源为阿里源:

sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# 更新源
yum makecache fast

查看可安装版本:

yum list docker-ce --showduplicates | sort -r

选择版本安装:

yum -y install docker-ce-19.03.9

设置开机启动r并启动Docke:

systemctl enable docker && systemctl start docker

配置镜像下载加速:

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors" : [
    "http://hub-mirror.c.163.com",
    "http://registry.docker-cn.com",
    "http://docker.mirrors.ustc.edu.cn"
  ]
}
EOF

重启生效:

[root@master ~]# systemctl restart docker
[root@master ~]# docker info | grep 'Server Version'
 Server Version: 19.03.9

至此,Docker安装完成;


Ⅲ.安装kubeadm/kubelet和kubectl

由于kubeadm依赖中已经包括了kubectl、kubelet,所以不用单独安装kubectl;

配置镜像源:

cat  > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装kubeadm:

yum install kubeadm-1.20.2 -y

由于版本更新频繁,这里指定版本号部署

设置开机启动:

systemctl enable kubelet

至此,所有配置配置完毕、所有软件安装完毕;

接下来我们创建镜像并克隆;

创建快照并克隆

在制作镜像快照前,如果系统是CentOS6,则还需要删除/etc/udev/rules.d/70-persistent-net.rules文件;

注:删除之后不可重启!否则下次重启还会自动创建该文件,还需要删除!

选择虚拟机→快照→拍摄快照,使用当前虚拟机的当前状态拍摄快照;

拍摄完成后,选择当前拍摄快照,点击克隆,选择现有快照,克隆类型有两种:链接克隆和完整克隆,选择一个即可;随后修改名称,完成即可;

链接克隆和完整克隆:

  • 链接克隆:母镜像损坏,克隆机都会损坏,但存储占有率低;
  • 完整克隆:母镜像和克隆机互不影响,但存储占有率高;

修改克隆机并测试网络互通性

通过镜像克隆两台虚拟机,取名为node1和node2;

修改各台虚拟机的配置,这里以node1为例:

$ vi /etc/sysconfig/network
NETWORKING=yes
- HOSTNAME=master
+ HOSTNAME=node1

$ vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
- IPADDR=192.168.24.180
+ IPADDR=192.168.24.181
NETMASK=255.255.255.0
GATEWAY=192.168.24.2
NAME=ens33
DEVICE=ens33
ONBOOT=yes
DNS1=192.168.24.2
DNS2=114.114.114.114

node2虚拟机类似;

注:克隆后/etc/sysconfig/network文件中的HOSTNAME字段也可能被删除了;

这时只需要添加HOSTNAME=具体节点名称即可;

最后做测试,如在master去ping其他node:

[root@master ~]# ping node1
PING node1 (192.168.24.181) 56(84) bytes of data.
64 bytes from node1 (192.168.24.181): icmp_seq=1 ttl=64 time=0.183 ms
64 bytes from node1 (192.168.24.181): icmp_seq=2 ttl=64 time=0.192 ms
64 bytes from node1 (192.168.24.181): icmp_seq=3 ttl=64 time=0.175 ms
^C
--- node1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.175/0.183/0.192/0.013 ms
[root@master ~]# ping node2
PING node2 (192.168.24.182) 56(84) bytes of data.
64 bytes from node2 (192.168.24.182): icmp_seq=1 ttl=64 time=0.274 ms
64 bytes from node2 (192.168.24.182): icmp_seq=2 ttl=64 time=0.235 ms
64 bytes from node2 (192.168.24.182): icmp_seq=3 ttl=64 time=0.199 ms
^C
--- node2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.199/0.236/0.274/0.030 ms

创建Kubernetes集群

Master节点初始化

在Master节点执行:

[root@master ~]# kubeadm init \
  --apiserver-advertise-address=192.168.24.180 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.20.2 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all
  • --apiserver-advertise-address集群通告地址,就是Master节点的IP地址;
  • --image-repository由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址;
  • --kubernetes-versionK8s版本,与上面安装的一致;
  • --service-cidr集群内部虚拟网络,Pod统一访问入口;
  • --pod-network-cidrPod网络,与下面部署的CNI网络组件yaml中保持一致;

注:集群内部虚拟地址和Pod网络地址可自行指定,但是必须要和下面的配置要保持一致!

也可以使用配置文件引导初始化:

  $ vi kubeadm.conf
  apiVersion: kubeadm.k8s.io/v1beta2
  kind: ClusterConfiguration
  kubernetesVersion: v1.20.2
  imageRepository: registry.aliyuncs.com/google_containers 
  networking:
    podSubnet: 10.244.0.0/16 
    serviceSubnet: 10.96.0.0/12 

  $ kubeadm init --config kubeadm.conf --ignore-preflight-errors=all

这里不在赘述;

等待一段时间后初始化结束,这时根据提示我们需要拷贝认证文件:

# 拷贝kubectl使用的连接k8s认证文件到默认路径
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

同时还会创建鉴权token,类似于:

  kubeadm join 192.168.24.180:6443 --token w2mfe2.3pwfhv6nm9yueb4d \
      --discovery-token-ca-cert-hash sha256:88b9219498210b9ac2f394e32b06a21ae58af887ff6566fa53f30fc9a9dd1ef3 --v=6

这个是稍后将子Node节点加入Master节点时需要的命令,需要先记下来;

此时查看Master节点的状态:

[root@master ~]# kubectl get nodes
NAME          STATUS     ROLES                  AGE     VERSION
master   NotReady   control-plane,master   2m15s   v1.20.2

这时master节点是NotReady的状态;

这是因为我们还没有为Kubernetes安装对应的CNI(Container Network Interface,容器网络接口)插件;

安装Calico插件

CNI是Kubernetes中的一个调用网络实现的接口标准;

Kubelet 通过这个标准的 API 来调用不同的网络插件以实现不同的网络配置方式,实现了这个接口的就是 CNI 插件,它实现了一系列的 CNI API 接口;

常用的CNI插件有很多,比如:

  • Flannel;
  • Calico;
  • Canal;
  • Weave;

这里我们选用的是Calico;

关于Calico:

Calico是一个纯三层的数据中心网络方案,Calico支持广泛的平台,包括Kubernetes、OpenStack等;

Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的虚拟路由器( vRouter) 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播;

官方文档:

首先,通过wget下载Calico配置文件:

 wget https://docs.projectcalico.org/manifests/calico.yaml

随后修改配置文件中的CALICO_IPV4POOL_CIDR

修改Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init指定的一样;

# 
vim calico.yaml 

# The default IPv4 pool to create on startup if none exists. Pod IPs will be
# chosen from this range. Changing this value after installation will have
# no effect. This should fall within `--cluster-cidr`.
-# - name: CALICO_IPV4POOL_CIDR
-#   value: "10.244.0.0/16"
+ - name: CALICO_IPV4POOL_CIDR
+   value: "10.244.0.0/16"
# Disable file logging so `kubectl logs` works.

最后通过配置文件启动服务:

kubectl apply -f calico.yaml

等待一段时间后,查看pod状态:

[root@master ~]# kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-6d7b4db76c-pkdfp   1/1     Running   1          18h
calico-node-5vmrs                          1/1     Running   2          18h
calico-node-95x84                          1/1     Running   1          18h
calico-node-tpx7f                          1/1     Running   2          18h
coredns-7f89b7bc75-lr8ch                   1/1     Running   1          18h
coredns-7f89b7bc75-z5j77                   1/1     Running   1          18h
etcd-master                                1/1     Running   2          18h
kube-apiserver-master                      1/1     Running   2          18h
kube-controller-manager-master             1/1     Running   2          18h
kube-proxy-5wtj8                           1/1     Running   2          18h
kube-proxy-b7h4t                           1/1     Running   2          18h
kube-proxy-kxhrs                           1/1     Running   2          18h
kube-scheduler-master                      1/1     Running   2          18h

可以看到,所有的服务都已经Running;

同时查看节点状态:

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   19h   v1.21.1

此时Master节点已经变为了Ready状态!

注:在将Node节点加入Master之前必须先安装CNI(即使不是Calico);

否则有可能出现子节点无法连接Master的情况;

Node节点加入Master

在Node节点中运行之前在Master节点初始化后kubeadm init输出的kubeadm join命令:

kubeadm join 192.168.24.180:6443 --token w2mfe2.3pwfhv6nm9yueb4d \
    --discovery-token-ca-cert-hash sha256:88b9219498210b9ac2f394e32b06a21ae58af887ff6566fa53f30fc9a9dd1ef3 --v=6

等待片刻,Node节点即加入至Master中;

集群创建完毕!

注:默认token有效期为24小时,当过期之后,该token就不可用了;

这时就需要重新创建token,操作如下:

  kubeadm token create --print-join-command

通过该命令可以快捷生成token;

部署WebUI(Dashboard)

接下来为Kubernetes创建后台管理面板,方便查看和管理;

Dashboard的网址:

使用时需要根据kubenetes版本选择Dashboard版本,此处为v2.1.0;

① 下载并部署

首先通过wget获取配置文件:

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml -O dashboard.yaml

由于在默认情况下,Dashboard只能集群内部访问;因此,需要修改Service为NodePort类型,暴露到外部;

文件修改内容如下:

vi dashboard.yaml

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: 30001
  selector:
    k8s-app: kubernetes-dashboard

随后,将配置文件应用:

kubectl apply -f dashboard.yaml

等待服务部署后查看:

[root@master ~]# kubectl get pods -n kubernetes-dashboard
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-79c5968bdc-ldvd7   1/1     Running   1          19h
kubernetes-dashboard-7448ffc97b-gpsv5        1/1     Running   1          19h

可以看到Dashboard已经成功跑起来了!

在浏览器访问:

出现下面的界面:

说明Dashboard部署成功;

在使用时需要添加用户及其权限以生成Token来登录;

② 创建用户角色

下面在Master节点创建service account并绑定默认cluster-admin管理员集群角色;

创建用户:

[root@master ~]# kubectl create serviceaccount dashboard-admin -n kube-system
serviceaccount/dashboard-admin created

用户授权:

[root@master ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created

获取用户Token:

[root@master ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
Name:         dashboard-admin-token-bbsrb
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: dashboard-admin
              kubernetes.io/service-account.uid: 9a01a52d-04a5-4ea6-b4f8-afdc22b1b9c6

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1066 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6Inpvc2Y0dmREN3p1SU5GWUhuWWVNek92NDJzX2JFQm94N09Dd1Nwa1lWUnMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tYmJzcmIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOWEwMWE1MmQtMDRhNS00ZWE2LWI0ZjgtYWZkYzIyYjFiOWM2Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.oAN9GWZlj6_HKdG_2KOLzjfysXpVBl6lcfarQThZYs-TaEtVzOfKqvAPe4e7yE93uunV-4ddr1fdyGDV3iwPPwpGF9B65IDn6XlM268agEwb2efNjlbwYku4NZt8RCgH_tf-IdvuwEiuYolaGvfYLGw1sQ6-Hphi4kw-G9KZgCAUYwcqhijGSwcZwP7GwMEsthqXLJE84mUHpqRj6QZoRV_vx3G54PyIplLrp04gkuLZArqcxxkY7Y9gibafbhKKbNbxY1v32lYIzG1VjwHb3vmLx_FABEilztYtU1alXfgtdvuiGBpfuzgXgOCgLyElRqUK04dWRCSIRHM3Ai9aRg

上述Token部分即为登录使用的Token;

可将其保存在一个文件中,方便登录时使用

使用获取到的Token登录Dashboard;

登录后的界面和下面的类似(但是你应该是没有Nginx服务的);

测试Kubernetes集群

既然服务已经部署完毕了,那么我们就来部署一个包含Nginx的Pod来测试一下吧!

创建一个部署的Deployment

[root@master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created

将Nginx服务暴露:

[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed

查看Pod和服务状态:

[root@master ~]# kubectl get pod,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-6799fc88d8-ld2qf   1/1     Running   1          19h

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        19h
service/nginx        NodePort    10.98.182.12   <none>        80:32182/TCP   19h

在Master中访问Nginx:

[root@master ~]# curl 10.98.182.12
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

同时,我们也可以在面板上看到Nginx的服务:

至此,我们的K8S已经安装成功了,接下来就愉快的玩耍吧!

附录

系列文章:

文章参考:

扩展阅读:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK