K8S入门详细地教程

Kubernetes详细教程#

1. Kubernetes介绍#

1.1 应用部署方式演变#

在部署应用程序的方式上,主要经历了三个时代:

  • 传统部署:互联网早期,会直接将应用程序部署在物理机上

    优点:简单,不需要其它技术的参与
    缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响

  • 虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境

    优点:程序环境不会相互产生影响,提供了一定程度的安全性
    缺点:增加了操作系统,浪费了部分资源

  • 容器化部署:与虚拟化类似,但是共享了操作系统

    优点:
    可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等
    运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦
    容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署

容器化部署方式给带来很多的便利,但是也会出现一些问题,比如说:

  • 一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器
  • 当并发访问量变大的时候,怎么样做到横向扩展容器数量

这些容器管理的问题统称为容器编排问题,为了解决这些容器编排问题,就产生了一些容器编排的软件:

  • Swarm:Docker自己的容器编排工具
  • Mesos:Apache的一个资源统一管控的工具,需要和Marathon结合使用
  • Kubernetes:Google开源的的容器编排工具

1.2 kubernetes简介#

kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

  • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
  • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
  • 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
  • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
  • 存储编排:可以根据容器自身的需求自动创建存储卷

1.3 kubernetes组件#

一个kubernetes集群主要是由控制节点(master)工作节点(node)构成,每个节点上都会安装不同的组件。

master:集群的控制平面,负责集群的决策 ( 管理 )

ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制
Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上
ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
Etcd :负责存储集群中各种资源对象的信息

node:集群的数据平面,负责为容器提供运行环境 ( 干活 )

Kubelet : 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器
KubeProxy : 负责提供集群内部的服务发现和负载均衡
Docker : 负责节点上容器的各种操作

下面,以部署一个nginx服务来说明kubernetes系统各个组件调用关系:

首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中

  1. 一个nginx服务的安装请求会首先被发送到master节点的apiServer组件

  2. apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上

  3. 在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer

  4. apiServer调用controller-manager去调度Node节点安装nginx服务

  5. kubelet接收到指令后,会通知docker,然后由docker来启动一个nginx的pod

*pod是kubernetes的最小操作单元,容器必须跑在pod中。*
  1. 一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理

这样,外界用户就可以访问集群中的nginx服务了

1.4 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. kubernetes集群环境搭建#

2.1 前置知识点#

目前生产部署Kubernetes 集群主要有两种方式:

1. kubeadm

Kubeadm 是一个K8s 部署工具,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes 集群。

官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

2. 二进制包

从github 下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。

Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

2.2 kubeadm 部署方式介绍#

kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:

  • 创建一个Master 节点kubeadm init
  • 将Node 节点加入到当前集群中$ kubeadm join <Master 节点的IP 和端口>

2.3 安装要求#

在开始之前,部署Kubernetes 集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统CentOS7.x-86_x64
  • 硬件配置:2GB 或更多RAM,2 个CPU 或更多CPU,硬盘30GB 或更多
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 禁止swap 分区

2.4 最终目标#

  • 在所有节点上安装Docker 和kubeadm
  • 部署Kubernetes Master
  • 部署容器网络插件
  • 部署Kubernetes Node,将节点加入Kubernetes 集群中
  • 部署Dashboard Web 页面,可视化查看Kubernetes 资源

2.5 准备环境#

角色 IP地址 组件 网络
k8s-master01 192.168.66.10 docker,kubectl,kubeadm,kubelet 仅主机模式
k8s-node01 192.168.66.20 docker,kubectl,kubeadm,kubelet 仅主机模式
k8s-node02 192.168.66.30 docker,kubectl,kubeadm,kubelet 仅主机模式
harbor仓库 192.168.66.100 docker 仅主机模式
koolshare 192.168.5.5 软路由,负责内部上网 仅主机模式 和nat 模式
koolshare 作为软路由,负责内部网络上网 仅主机和nat模式,需要2个网卡

2.6 环境初始化#

2.6.1 检查操作系统的版本
# 此方式下安装kubernetes集群要求Centos版本要在7.5或之上
[root@master ~]# cat /etc/redhat-release
Centos Linux 7.5.1804 (Core)
2.6.2 主机名解析
  1. 设置主机名
hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02
hostnamectl set-hostname harbor

为了方便集群节点间的直接调用,在这个配置一下主机名解析,企业中推荐使用内部DNS服务器

  1. 主机名解析
    编辑三台服务器的/etc/hosts文件,添加下面内容
echo "192.168.88.10 k8s-master01" >> /etc/hosts
echo "192.168.88.20 k8s-node01" >> /etc/hosts
echo "192.168.88.30 k8s-node02" >> /etc/hosts
echo "192.168.88.100 harbor" >> /etc/hosts
echo "192.168.88.100 hub.atguigu.com" >> /etc/hosts
echo "120.55.105.209 registry.aliyuncs.com" >> /etc/host
echo "185.199.108.133 raw.githubusercontent.com" >> /etc/host
2.6.3 时间同步

kubernetes要求集群中的节点时间必须精确一直,这里使用chronyd服务从网络同步时间

企业中建议配置内部的会见同步服务器

# 启动chronyd服务
[root@master ~]# systemctl start chronyd
[root@master ~]# systemctl enable chronyd
[root@master ~]# date
# 设置系统时区为 中国/上海
timedatectl set-timezone Asia/Shanghai
# 将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0
# 重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond
2.6.4 禁用iptable和firewalld服务

kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

# 1 关闭firewalld服务
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
# 2 关闭iptables服务
[root@master ~]# systemctl stop iptables
[root@master ~]# systemctl disable iptables
2.6.5 禁用selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable
# 注意修改完毕之后需要重启linux服务
SELINUX=disabled
# 或者
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
2.6.6 禁用swap分区

swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
vim /etc/fstab
注释掉 /dev/mapper/centos-swap swap
# /dev/mapper/centos-swap swap
或者:
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2.6.7 禁用非必要服务

关闭非必要的服务,提供能系统性能。

systemctl stop postfix && systemctl disable postfix
2.6.8 安装相关工具包
#设置centos镜像
cd /etc/yum.repos.d/
mv * bak/
# 下载镜像
curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 安装工具包
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat vim wget libseccomp net-tools git lrzsz
2.6.9 修改linux的内核参数
# 修改linux的内核采纳数,添加网桥过滤和地址转发功能
# 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:
cd ~
cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
# 复制配置文件到 /etc/下
[root@k8s-master01 ~]# cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
# 重新加载配置
[root@k8s-master01 ~]# sysctl -p /etc/sysctl.d/kubernetes.conf
# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter
2.6.10 设置 rsyslogd 和 systemd journald
mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盘Storage=persistent
# 压缩历史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空间 10G
SystemMaxUse=10G
# 单日志文件最大 200M
SystemMaxFileSize=200M
# 日志保存时间 2 周
MaxRetentionSec=2week
#不将日志转发到syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald
2.6.11 升级系统内核

CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 设置开机从新内核启动
grub2-set-default 'CentOS Linux (5.4.188-1.el7.elrepo.x86_64) 7 (Core)'
2.6.12 配置ipvs功能
# 1.安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadmin -y
# 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@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
2.6.13 安装docke
# 1. 切换镜像源
# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d.docker-ce.repo
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 2. 安装docker依赖的工具和持久化包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3. 查看所有的可用版本
yum list docker-ce --showduplicates | sort -r
# 4.安装特定版本的docker-ce
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
# 5. 添加一个配置文件
#Docker 在默认情况下使用Vgroup Driver为cgroupfs,而Kubernetes推荐使用systemd来替代cgroupfs
# 6. 创建 /etc/docker 目录
mkdir /etc/docker
# 7. 配置 daemon.
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": { "max-size": "100m"
},
"insecure-registries": ["http://192.168.88.100"]
}
EOF
# 8. 设置服务
mkdir -p /etc/systemd/system/docker.service.d
# 9. 启动dokcer
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

2.6.14 安装Kubernetes组件

# 1. 由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源
# 2. 编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 3.安装kubeadm、kubelet和kubectl
yum install -y kubelet-1.21.5 kubeadm-1.21.5 kubectl-1.21.5 --disableexcludes=kubernetes
# 4. 配置kubelet的cgroup (配置ivps,后面也可以配置)
#编辑/etc/sysconfig/kubelet, 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
# 5. 启动 kubelet 服务
systemctl enable kubelet.service && systemctl restart kubelet.service

2.6.15 准备集群镜像#

在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
[root@k8s-master01 ~]# kubeadm config images list

下载镜像

此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案

vim load-images.sh
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)

for imageName in ${images[@]};do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

集群初始化

第一种
下面的操作只需要在master节点上执行即可

创建集群

[root@master ~]# kubeadm init
--apiserver-advertise-address=192.168.88.100
--image-repository registry.aliyuncs.com/google_containers
--kubernetes-version=v1.21.5
--service-cidr=10.96.0.0/12
--pod-network-cidr=10.244.0.0/16

第二种: 手动修改kubeadm-config.yaml 文件
kubeadm config print init-defaults > kubeadm-config.yaml
vim kubeadm-config.yaml
advertiseAddress: 192.168.88.10 # 配置主机IP
imageRepository: registry.aliyuncs.com/google_containers # 修改镜像下载地址
kubernetesVersion: 1.21.5 #设置版本

networking:
dnsDomain: cluster.local
podSubnet: "10.244.0.0/16" # 设置pod 网络
serviceSubnet: 10.96.0.0/12

查看所需的镜像文件
[root@k8s-master01 ~]# kubeadm config images list --config kubeadm-config.yaml
registry.aliyuncs.com/google_containers/kube-apiserver:v1.21.5
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.21.5
registry.aliyuncs.com/google_containers/kube-scheduler:v1.21.5
registry.aliyuncs.com/google_containers/kube-proxy:v1.21.5
registry.aliyuncs.com/google_containers/pause:3.4.1
registry.aliyuncs.com/google_containers/etcd:3.4.13-0
registry.aliyuncs.com/google_containers/coredns:v1.8.0
[root@k8s-master01 ~]#

拉去所需要的镜像

因网络问题,无法拉取,需要配置地址:echo "120.55.105.209 registry.aliyuncs.com" >> /etc/host

[root@k8s-master01 ~]# kubeadm config images pull --config kubeadm-config.yaml

如果是内网,可以将包先下载好,然后导入,导入方式请看2.6.11 的load-images.sh 脚本

初始化操作
[root@k8s-master01 ~]# kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log

安装完成后会生成
将node机器加入到集群中的命令.分别再集群node 中执行,将node加入急群众
kubeadm join 192.168.88.10:6443 --token abcdef.0123456789abcdef
--discovery-token-ca-cert-hash sha256:cdc49b48bf9de52eabef39cee3c2b41ad744f4cc9d9133d11318e4d0f45a5f6f

安装失败重置

kubeadm reset 重置 主节点执行
kubeadm reset -f #清理加入信息 节点执行
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a && kubeadm reset && systemctl daemon-reload && systemctl restart kubelet && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

查看token

kubeadm token list

重新生产永久token (token 过期,可用来生成)

kubeadm token create --ttl 0 --print-join-command

创建必要文件

[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

查看启动接口 kube-apiserve

[root@k8s-master01 ~]# netstat -pnlt | grep 6443

查看版本
[root@k8s-master01 ~]# kubeadm version

[root@k8s-master01 ~]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.5", GitCommit:"aea7bbadd2fc0cd689de94a54e5b7b758869d691", GitTreeState:"clean", BuildDate:"2021-09-15T21:09:27Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}
下面的操作只需要在node节点上执行即可
kubeadm join 192.168.0.100:6443 --token awk15p.t6bamck54w69u4s8
--discovery-token-ca-cert-hash sha256:a94fa09562466d32d29523ab6cff122186f1127599fa4dcd5fa0152694f17117
在master上查看节点信息
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 6m v1.17.4
node1 NotReady 22s v1.17.4
node2 NotReady 19s v1.17.4

2.6.13 安装网络插件flanneld,只在master节点操作即可

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

由于外网不好访问,如果出现无法访问的情况,可以直接用下面的 记得文件名是kube-flannel.yml,位置:/root/kube-flannel.yml内容

https://github.com/flannel-io/flannel/tree/master/Documentation/kube-flannel.yml

2.6.14 使用kubeadm reset重置集群

在master节点之外的节点进行操作

kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1

重启kubelet#

systemctl restart kubelet

重启docker#

systemctl restart docker

2.6.15 重启kubelet和docker

重启kubelet

systemctl restart kubelet

重启docker

systemctl restart docker
使用配置文件启动fannel

kubectl apply -f kube-flannel.yml

等待它安装完毕 发现已经是 集群的状态已经是Ready

2.6.16 kubeadm中的命令

生成 新的token

[root@master ~]# kubeadm token create --print-join-command

手动安装网络插件flanneld
1、准备2个文件,kube-flannel.yml文件的镜像的路径必须跟flanneld-v0.19.1-amd64.docker的版本一致
flanneld-v0.19.1-amd64.docker
kube-flannel.yml
2、导入flanneld docker (每个节点都要执行,否则各节点的flanneld拉取镜像失败。)
[root@k8s-master01 ~]# docker load -i flanneld-v0.19.1-amd64.docker

3、启动
kubectl apply -f kube-flannel.yml

删除

kubectl delete -f kube-flannel.yml
4、查看启动状态。
kubectl get pod -n kube-system
参数 -w 实时查看

发现kube-flannel-ds-x8g6k 的状态为running。

发现 kube-flannel-ds 相关的为runnning 后。
重新生产永久token (token 过期,可用来生成)
kubeadm token create --ttl 0 --print-join-command

然后再各node 执行,将node机器加入到集群中,通过 kubectl get pod -n kube-system -w 试试启动信息

命令:
1、查看 kube-system 空间下的pod 。
参数-n 指定
参数-w 实时监控
参数 -o wide 查看详细信息
kubectl get pod -n kube-system
kubectl get pod -n kube-system -o wide
kubectl get pod -n kube-system -o wide -w

2.7 集群测试#

2.7.1 创建一个nginx服务

kubectl create deployment nginx --image=nginx:1.14-alpine
2.7.2 暴露端口

kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort
2.7.3 查看服务

kubectl get pod,svc
2.7.4 查看pod
![](https://img2022.cnblogs.com/blog/2672625/202209/2672625-20220927102938378-2092085675.png)
2.7.5 浏览器测试结果:
![](https://img2022.cnblogs.com/blog/2672625/202209/2672625-20220927103402732-34659280.png)
![](https://img2022.cnblogs.com/blog/2672625/202209/2672625-20220927103419531-400745191.png)
![](https://img2022.cnblogs.com/blog/2672625/202209/2672625-20220927103433935-2097945662.png)
posted @   启明星创业学堂  阅读(1555)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示
主题色彩