本节主要介绍:
1. 部署的演变过程:
整个部署的演变过程如图所示:
传统部署时代:
如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况下,会导致其它应用程序的性能下降。一种解决方案就是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且维护许多物理服务器的成本也很高。
虚拟化部署
缺点:每台虚拟机都有各自的操作系统等,虚拟层冗余,导致资源浪费和性能下降。
容器化部署
kubernetes
介绍 kubernetes (k8s)
是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes
拥有一个庞大且快速增长的生态系统。Kubernetes
的服务、支持和工具广泛可用。k8s
这个缩写是因为 k 和 s 之间有八个字符的关系。
Kubernetes
为我们提供下面的功能:
一个kubernetes
集群主要是由控制节点(master)、**工作节点(node)**构成,每个节点上都会安装不同的组件。
master:集群的控制平面,负责集群的决策 ( 管理 )
ApiServer
: 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API
注册和发现等机制
Scheduler
: 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上
ControllerManager
: 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
Etcd
:负责存储集群中各种资源对象的信息
node:集群的数据平面,负责为容器提供运行环境 ( 干活 )
Kubelet : 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器
KubeProxy
: 负责提供集群内部的服务发现和负载均衡pod:Pod 是对容器的再一次封装,一个pod可以包含多个container
- docker run 启动的是一个 container(容器),容器是 Docker 的基本单位,一个应用就是一个容器
kubectl run
启动的是一个应用称为一个 Pod ,Pod 是Kubernetes
的基本单位。Docker : 负责节点上容器的各种操作
下面,以部署一个nginx服务来说明kubernetes系统各个组件调用关系:
首先要明确,一旦kubernetes
环境启动之后,master和node都会将自身的信息存储到etcd
数据库中
一个nginx
服务的安装请求会首先被发送到master
节点的apiServer
组件
apiServer
组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node
节点上
在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer
apiServer
调用controller-manager
去调度Node
节点安装nginx
服务
kubelet
接收到指令后,会通知docker
,然后由docker
来启动一个nginx
的pod
pod
是kubernetes
的最小操作单元,容器必须跑在pod
中至此,
一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理
这样,外界用户就可以访问集群中的nginx
服务了
kubernetes
名词解释Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控
Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行
Pod:kubernetes
的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器
Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod
Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签
NameSpace
:命名空间,用来隔离pod的运行环境
1. 集群类型:
kubernetes集群大体上可以分为两类:
2. 搭建方式
Kubernetes 有多种部署方式,目前主流的方式有 kubeadm 、minikube 、二进制包。
minikube:一个用于快速搭建单节点的 Kubernetes 工具。
kubeadm:一个用于快速搭建Kubernetes 集群的工具(可以用于生产环境)。
二进制包:从官网上下载每个组件的二进制包,依次去安装(建议生产环境使用)。
kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:
本次搭建 采用kubeadm的方式进行
3. 主机规划
角色 | IP地址 | 操作系统 | 配置 |
---|---|---|---|
master | 192.168.79.100 | CentOS7.9 + 基础设施服务器 | 2核2G 20G |
node1 | 192.168.79.101 | CentOS7.9 + 基础设施服务器 | 2核2G 20G |
node2 | 192.168.79.102 | CentOS7.9 + 基础设施服务器 | 2核2G 20G |
本次集群搭建:3台CentOS服务器,一个master,两个node(一主二从)CentOS 7.9 基础设施服务器
每台服务器安装docker(18.06.3);kubeadm(1.17.4); kubelet (1.17.4); kubectl (1.17.4)
VMWare安装CentOS7并配置IP地址步骤:
软件下载地址:
CentOS7 阿里云下载地址: 点我下载CentOS7镜像
VM Ware:云盘链接:云盘下载链接 提取码:5lgm
通过VM
软件分别安装3台CentOS
服务器,一台为master,两台为Node。以其中一台为例,具体安装过程见另一篇文章:
CentOS7
安装详细过程
点我查看CentOS7详细安装过程
三台CentOS服务器安装完毕之后 如图所示,可以通过MobaXterm软件进行连接,可以同时操作三台机器。
查看CentOS安装版本,确保为CentOS7以上
# 此方式安装k8s集群要求CentOS 版本必须在7.5以之上,本次使用7.9版本
[root@master ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@master ~]#
主机域名解析
方便后面集群节点之间的直接调用访问,配置一下主机域名解析
#编辑三台服务器的/etc/hosts文件,在里面添加如下内容:
192.168.79.100 master
192.168.79.101 node1
192.168.79.102 node2
时间同步
k8s
要求集群中的节点时间必须精确一直,使用chronyd
服务从网络同步时间
# 启动chronyd服务
[root@master ~]# systemctl start chronyd
# 将其设置为开机自启动
[root@master ~]# systemctl enable chronyd
# 查看当前三台机器的时间(只展示其中master一台)
[root@master ~]# date
2022年 07月 01日 星期五 13:04:36 CST
禁用iptables和firewalld服务
k8s和docker会在运行中产生大量的iptables规则,为了不和系统规则混淆,直接关闭系统的规则
# 关闭firewalld
[root@master ~]# systemctl stop firewalld
# 设置为开启禁止自启
[root@master ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
# 关闭iptables (本机器没有iptales)
[root@master ~]# systemctl stop iptables
Failed to stop iptables.service: Unit iptables.service not loaded.
禁用selinux
selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群时会产生各种各样的问题。
# 编辑注册表/etc/selinux/config文件,修改SELINUX的值为disabled 修改完之后需要重启Linux服务才能生效
# 当前为开启状态
[root@master ~]# getenforce
Enforcing
#
[root@master ~]# vim /etc/selinux/config
# 进入该文件进行修改
禁用swap分区
swap分区是虚拟内存分区,在物理内存使用完毕之后,将磁盘空间虚拟成内存来使用。启动swap设备会对系统性能产生影响,因此直接禁用swap分区
# 编辑分区的配置文件/etc/fstab 注释掉swap分区这一行内容,修改之后需要重启服务
[root@master ~]# vim /etc/fstab
修改Linux内核参数
#修改Linux的内核参数,添加网桥过滤和地址转发功能
# 编辑(新建)/etc/sysctl.d/kubernetes.conf文件,添加如下配置
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
# 保存退出之后重新加载配置
[root@master ~]# sysctl -p
# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
# 查看该模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 151336 1 br_netfilter
配置ipvs
功能
在k8s
中service
有两种代理模式,一种是基于iptables
的,一种是基于ipvs
的,两者比较来说,ipvs
的性能较高一些,使用该模式,需要手动载入ipvs
模块
# 1.安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadmin -y
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/4): base/7/x86_64/primary_db | 6.1 MB 00:00:00
(2/4): base/7/x86_64/group_gz | 153 kB 00:00:00
(3/4): extras/7/x86_64/primary_db | 247 kB 00:00:00
(4/4): updates/7/x86_64/primary_db | 16 MB 00:00:18
软件包 ipset-7.1-1.el7.x86_64 已安装并且是最新版本
没有可用软件包 ipvsadmin。
无须任何处理
# 2.添加需要加载的模块写入脚本文件
[root@master ~]# cat < /etc/sysconfig/modules/ipvs.modules
> #!/bin/bash
> modprobe -- ip_vs
> modprobe -- ip_vs_rr
> modprobe -- ip_vs_wrr
> modprobe -- ip_vs_sh
> modprobe -- nf_conntrack_ipv4
> EOF
# 3. 为脚本文件添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 4. 执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
# 5. 查看对应模块是否加载成功
[root@node2 ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
nf_conntrack_ipv4 15053 0
nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
ip_vs_sh 12688 0
ip_vs_wrr 12697 0
ip_vs_rr 12600 0
ip_vs 145458 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack 139264 2 ip_vs,nf_conntrack_ipv4
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
[root@master ~]#
重启服务器
[root@master ~]# reboot
重启服务后 查看selinux
是否关闭成功
# 显示Disabled 关闭成功
[root@master ~]# getenforce
Disabled
docker的官方镜像源速度较慢,切换为阿里云的镜像源
# 切换为阿里云的镜像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
查看当前镜像源中支持的docker版本
# 支持的docker版本,本次选择 docker-ce-18.06.3.ce-3.el7
[root@master ~]# yum list docker-ce --showduplicates
[root@master ~]#
安装指定版本的docker-ce
# --setopt=obsoletes=0 表示指定安装对应版本
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
添加一个配置文件
# Docker 默认情况下使用Cgroupfs,而k8s推荐使用systemd来替代cgroupfs, 更换下载的镜像源
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat < /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors":["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF
启动docker
# 启动docker
[root@master ~]# systemctl restart docker
# 设置为开机自启
[root@master ~]# systemctl enable docker
检查docker的状态和版本信息
#检查版本信息
[root@master ~]# docker version
Client:
Version: 18.06.3-ce
API version: 1.38
Go version: go1.10.3
Git commit: d7080c1
Built: Wed Feb 20 02:26:51 2019
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.3-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: d7080c1
Built: Wed Feb 20 02:28:17 2019
OS/Arch: linux/amd64
Experimental: false
[root@master ~]#
kubernetes
组件切换k8s镜像源
# k8s镜像源在国外,下载速度较慢,切换为阿里云的
# 编辑(新建文件)/etc/yum.repos.d/kubernetes.repo, 添加如下的配置:
[root@master ~]# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
安装kubeadm
、kubectl
、kubelet
# 安装指定版本 1.17.4
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
修改配置文件
# 配置kubelet的cgroup, 编辑/etc/sysconfig/kubelet,添加如下配置:
[root@master ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
设置kubelet为开机自启
[root@master ~]# systemctl enable kubelet
前面2.2-2.5的所有内容需要在三台虚拟机上都进行操作,做一个搭建集群环境的准备
开始对集群进行初始化,将node节点加入到集群中,下面所有步骤只需要在master节点进行操作即可
创建集群
# 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址
[root@master ~]# kubeadm init --kubernetes-version=v1.17.4 --apiserver-advertise-address=192.168.79.100 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
# 下面是执行命令之后的运行结果
W0701 15:41:54.850536 9562 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0701 15:41:54.850592 9562 validation.go:28] Cannot validate kubelet config - no validator is available
[init] Using Kubernetes version: v1.17.4
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.79.100]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [master localhost] and IPs [192.168.79.100 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [master localhost] and IPs [192.168.79.100 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
W0701 15:42:21.370847 9562 manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[control-plane] Creating static Pod manifest for "kube-scheduler"
W0701 15:42:21.371810 9562 manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 15.006014 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.17" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node master as control-plane by adding the label "node-role.kubernetes.io/master=''"
[mark-control-plane] Marking the node master as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Using token: l8o7vp.gbiatmb3iexxbppo
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
# 显示集群下载安装完毕
Your Kubernetes control-plane has initialized successfully!
# 需要运行下面这段话
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
# 将任意多的worker nodes加入到根中
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.79.100:6443 --token l8o7vp.gbiatmb3iexxbppo \
--discovery-token-ca-cert-hash sha256:dfa1740b693f91f1e3eaf889c50802195d7dc30a4f2a3c7a9b7101b295ad1fe9
创建必要文件:
sudo chown $(id -u):$(id -g) $HOME/.kube/config# 集群创建完毕之后显示下面这段提示,
# 需要运行下面这段话
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 此时查看node会发现这个集群只有一个master节点,需要将node节点加入到集群中
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 4m51s v1.17.4
[root@master ~]#
将node的节点加入到集群,需要将如下命令在node1和node2中进行执行
# 将任意多的worker nodes加入到根中
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.79.100:6443 --token l8o7vp.gbiatmb3iexxbppo \
--discovery-token-ca-cert-hash sha256:dfa1740b693f91f1e3eaf889c50802195d7dc30a4f2a3c7a9b7101b295ad1fe9
# 分别在node1和node2中运行这两句命令
[root@node1 ~]# kubeadm join 192.168.79.100:6443 --token l8o7vp.gbiatmb3iexxbppo --discovery-token-ca-cert-hash sha256:dfa1740b693f91f1e3eaf889c50802195d7dc30a4f2a3c7a9b7101b295ad1fe9
[root@node2 ~]# kubeadm join 192.168.79.100:6443 --token l8o7vp.gbiatmb3iexxbppo --discovery-token-ca-cert-hash sha256:dfa1740b693f91f1e3eaf889c50802195d7dc30a4f2a3c7a9b7101b295ad1fe9
#加入到集群之后,查看master机器中集群的节点信息:此时显示所有的node均已添加进来,但是还处于NotReady的状态,需要添加网络插件
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 8m9s v1.17.4
node1 NotReady <none> 14s v1.17.4
node2 NotReady <none> 31s v1.17.4
[root@master ~]#
配置网络插件
# 下载网络插件到yml文件中
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 控制台的执行结果如下
--2022-07-01 15:53:27-- https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
正在解析主机 raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.108.133, 185.199.109.133, ...
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:5750 (5.6K) [text/plain]
正在保存至: “kube-flannel.yml”
100%[=======================================================================================================================================================================>] 5,750 --.-K/s 用时 0s
2022-07-01 15:53:28 (18.3 MB/s) - 已保存 “kube-flannel.yml” [5750/5750])
# 将文件应用 apply命令
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/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
# 新开master的控制台窗口, 查看运行进度条情况
[root@master ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-9d85f5447-4r5vf 0/1 ContainerCreating 0 12m
coredns-9d85f5447-r9k4g 0/1 ContainerCreating 0 12m
etcd-master 1/1 Running 0 12m
kube-apiserver-master 1/1 Running 0 12m
kube-controller-manager-master 1/1 Running 0 12m
kube-flannel-ds-298ct 1/1 Running 0 61s
kube-flannel-ds-z6whb 1/1 Running 0 61s
kube-flannel-ds-zl4mx 1/1 Running 0 61s
kube-proxy-9m6xw 1/1 Running 0 12m
kube-proxy-mhssb 1/1 Running 0 5m23s
kube-proxy-mnn62 1/1 Running 0 5m6s
kube-scheduler-master 1/1 Running 0 12m
# 查看nodes的状态显示处于Ready状态
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 13m v1.17.4
node1 Ready <none> 5m46s v1.17.4
node2 Ready <none> 6m3s v1.17.4
# 所有组件处于running运行状态
[root@master ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-9d85f5447-4r5vf 1/1 Running 0 13m
coredns-9d85f5447-r9k4g 1/1 Running 0 13m
etcd-master 1/1 Running 0 13m
kube-apiserver-master 1/1 Running 0 13m
kube-controller-manager-master 1/1 Running 0 13m
kube-flannel-ds-298ct 1/1 Running 0 111s
kube-flannel-ds-z6whb 1/1 Running 0 111s
kube-flannel-ds-zl4mx 1/1 Running 0 111s
kube-proxy-9m6xw 1/1 Running 0 13m
kube-proxy-mhssb 1/1 Running 0 6m13s
kube-proxy-mnn62 1/1 Running 0 5m56s
kube-scheduler-master 1/1 Running 0 13m
[root@master ~]#
至此,整个集群已经全部搭建完毕
部署nginx
进行集群环境的测试
# 1. 部署nginx 版本 1.14-alpine
[root@master ~]# kubectl create deployment nginx --image=nginx:1.14-alpine
deployment.apps/nginx created
# 2. 暴露端口
[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
# 3. 查看服务状态 一个pod已经正在运行, service服务处于运行状态
[root@master ~]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-6867cdf567-ppmrj 1/1 Running 0 60s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18m
service/nginx NodePort 10.104.243.191 <none> 80:30134/TCP 43s
# 4. 获取集群的pod信息
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-6867cdf567-ppmrj 1/1 Running 0 81s
[root@master ~]#
# 5. 根据暴露的端口,可以通过浏览器访问部署的nginx
# 访问地址为: 192.168.79.100:30134
# 访问结果如下图所示:成功访问到部署的nginx页面,部署成功