入门一:介绍及环境准备"/>
Kubernetes入门一:介绍及环境准备
Kubernetes学习笔记
本节主要介绍:
- Kubernetes的一些基础知识
- Kubernetes集群搭建的相关操作内容
前言
1. 部署的演变过程:
整个部署的演变过程如图所示:
-
传统部署时代:
- 在物理机服务器上运行应用程序
- 无法为应用程序定义资源边界
- 导致资源分配问题
如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况下,会导致其它应用程序的性能下降。一种解决方案就是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且维护许多物理服务器的成本也很高。
-
虚拟化部署
- 虚拟化技术允许在单个物理服务器的 CPU 上运行多个虚拟机
- 虚拟化允许应用程序在虚拟机之间隔离,并提供一定程序上的安全,应用程序之间不会被随意访问
- 虚拟化技术能够更好的利用物理服务器上的资源
- 每个虚拟机都是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括自己的操作系统等
缺点:每台虚拟机都有各自的操作系统等,虚拟层冗余,导致资源浪费和性能下降。
-
容器化部署
- 容器类似于虚拟机 ,但是可以在应用程序之间共享操作系统 (操作系统只有一份,各个程序之间共享)
- 容器和虚拟机类似,具有自己的文件系统、CPU 、内存、进程空间等
- 由于容器和基础架构分离,因为可以很方便的进行跨云和跨 Linux 发行版进行移植、
1、kubernetes
介绍
1.1 概述
kubernetes (k8s)
是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes
拥有一个庞大且快速增长的生态系统。Kubernetes
的服务、支持和工具广泛可用。k8s
这个缩写是因为 k 和 s 之间有八个字符的关系。
Kubernetes
为我们提供下面的功能:
- 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
- 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
- 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
- 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
- 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
- 存储编排:可以根据容器自身的需求自动创建存储卷
1.2 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
服务了
1.3 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的运行环境
2、集群环境搭建
2.1 整体介绍
1. 集群类型:
kubernetes集群大体上可以分为两类:
- **一主多从:**一台master节点和多台node节点,该方式搭建简单,一旦主机master出现故障异常,整个集群会宕机,较为适用于测试环境。
- 多主多从: 多台master节点和多台node节点,该方式搭建较为复杂,但是具有较高的安全性,一旦一个master节点出现故障,其他master可以立马顶上去,保证集群正常运转,多用于生产环境。
2. 搭建方式
Kubernetes 有多种部署方式,目前主流的方式有 kubeadm 、minikube 、二进制包。
-
minikube:一个用于快速搭建单节点的 Kubernetes 工具。
-
kubeadm:一个用于快速搭建Kubernetes 集群的工具(可以用于生产环境)。
-
二进制包:从官网上下载每个组件的二进制包,依次去安装(建议生产环境使用)。
kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:
- 创建一个Master 节点kubeadm init
- 将Node 节点加入到当前集群中$ kubeadm join <Master 节点的IP 和端口>
本次搭建 采用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)
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止swap 分区
2.2、VM Ware安装CentOS 7
VMWare安装CentOS7并配置IP地址步骤:
- 首先下载并安装好VM软件以及CentOS7版本的镜像:下载地址:
软件下载地址:
CentOS7 阿里云下载地址: 点我下载CentOS7镜像
VM Ware:云盘链接:云盘下载链接 提取码:5lgm
-
通过
VM
软件分别安装3台CentOS
服务器,一台为master,两台为Node。以其中一台为例,具体安装过程见另一篇文章:CentOS7
安装详细过程点我查看CentOS7详细安装过程
2.3 环境初始化
三台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 <<EOF> /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
2.4 安装docker
-
docker的官方镜像源速度较慢,切换为阿里云的镜像源
# 切换为阿里云的镜像源 [root@master ~]# wget .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 <<EOF> /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors":[""] } EOF
-
启动docker
# 启动docker [root@master ~]# systemctl restart docker # 设置为开机自启 [root@master ~]# systemctl enable docker
-
检查docker的状态和版本信息
#检查版本信息 [root@master ~]# docker version Client:Version: 18.06.3-ceAPI version: 1.38Go version: go1.10.3Git commit: d7080c1Built: Wed Feb 20 02:26:51 2019OS/Arch: linux/amd64Experimental: falseServer:Engine:Version: 18.06.3-ceAPI version: 1.38 (minimum version 1.12)Go version: go1.10.3Git commit: d7080c1Built: Wed Feb 20 02:28:17 2019OS/Arch: linux/amd64Experimental: false [root@master ~]#
2.5 安装kubernetes
组件
-
切换k8s镜像源
# k8s镜像源在国外,下载速度较慢,切换为阿里云的 # 编辑(新建文件)/etc/yum.repos.d/kubernetes.repo, 添加如下的配置: [root@master ~]# vim /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl= enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=.gpg .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的所有内容需要在三台虚拟机上都进行操作,做一个搭建集群环境的准备
2.6 集群初始化
开始对集群进行初始化,将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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: 将任意多的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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo 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 .yml# 控制台的执行结果如下 --2022-07-01 15:53:27-- .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 用时 0s2022-07-01 15:53:28 (18.3 MB/s) - 已保存 “kube-flannel.yml” [5750/5750])# 将文件应用 apply命令 [root@master ~]# kubectl apply -f .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 ~]#
至此,整个集群已经全部搭建完毕
2.6 集群测试
部署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 60sNAME 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页面,部署成功
更多推荐
Kubernetes入门一:介绍及环境准备
发布评论