Kubernetes安装与基础配置

Kubernetes安装与基础配置

kubernetes官网地址

https://kubernetes.io/

kubernets中文社区地址:

https://www.kubernetes.org.cn/

硬件安装要求

序号硬件要求
1CPU至少2核
2内存至少3G
3硬盘至少50G

演示集群节点

主机名主机IP
k8s-master01192.168.198.156
k8s-node01192.168.198.157
k8s-node02192.168.198.158
k8s-node03192.168.198.159
centos7系统配置
centos下载地址:

推荐大家使用centos7.6以上版本。

http://mirrors.aliyun.com/centos/7/isos/x86_64/

查看centos系统版本命令:

cat /etc/centos-release
配置阿里云yum源
1.下载安装wget
yum install -y wget

2.备份默认的yum
mv /etc/yum.repos.d /etc/yum.repos.d.backup

3.设置新的yum目录
mkdir -p /etc/yum.repos.d

4.下载阿里yum配置到该目录中,选择对应版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

5.更新epel源为阿里云epel源
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/epel-testing.repo http://mirrors.aliyun.com/repo/epel-testing.repo

6.重建缓存
yum clean all
yum makecache

7.看一下yum仓库有多少包
yum repolist
yum update
升级系统内核
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
grep initrd16 /boot/grub2/grub.cfg
grub2-set-default 0

reboot

查看centos系统内核命令:

uname -r
uname -a

查看CPU命令:

lscpu

查看内存命令:

free
free -h

查看硬盘信息

fdisk -l
关闭防火墙

勿在生产环境操作

systemctl stop firewalld
systemctl disable firewalld
关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
网桥过滤
vi /etc/sysctl.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
net.ipv4.ip_forward=1
net.ipv4.ip_forward_use_pmtu = 0

生效命令
sysctl --system

查看效果
sysctl -a|grep "ip_forward"
开启IPVS
安装IPVS
yum -y install ipset ipvsdm

编译ipvs.modules文件
vi /etc/sysconfig/modules/ipvs.modules

文件内容如下(低版本内核把nf_conntrack修改为nf_conntrack_ipv4)
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack

赋予权限并执行
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&lsmod | grep -e ip_vs -e nf_conntrack

重启电脑,检查是否生效
reboot
lsmod | grep ip_vs_rr
同步时间
安装软件
yum -y install ntpdate

向阿里云服务器同步时间
ntpdate time1.aliyun.com

删除本地时间并设置时区为上海
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

查看时间
date -R || date
命令补全
安装bash-completion
yum -y install bash-completion bash-completion-extras

使用bash-completion
source /etc/profile.d/bash_completion.sh
关闭swap分区
临时关闭:
swapoff -a

永久关闭:
vi /etc/fstab

将文件中的/dev/mapper/centos-swap这行代码注释掉
#/dev/mapper/centos-swap swap swap defaults 0 0

确认swap已经关闭:若swap行都显示 0 则表示关闭成功
free -m
hosts配置
vi /etc/hosts

文件内容如下:
192.168.198.156 k8s-master01
192.168.198.157 k8s-node01
192.168.198.158 k8s-node02
192.168.198.159 k8s-node03
安装docker
阿里云开发者平台

开发者平台官网地址:可以参考阿里云官网提供的docker安装教程进行安装。

https://www.aliyun.com/

安装docker前置条件
yum install -y yum-utils device-mapper-persistent-data lvm2
添加源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast
查看docker更新版本
yum list docker-ce --showduplicates | sort -r
安装docker最新版本
yum -y install docker-ce

安装指定版本:
yum -y install docker-ce-18.09.8

可以通过docker version命令查看
docker-client版本:当前最新版本
docker-server版本为:18.09.8
开启dock而服务
systemctl start docker

systemctl status docker

安装阿里云镜像加速器

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["自己的阿里云镜像加速地址"]
}
EOF

例如:
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://es4orw3p.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker
设置docker开启启动服务
systemctl enable docker
修改Cgroup Driver
vi /etc/docker/daemon.json

修改daemon.json,新增:
,"exec-opts": ["native.cgroupdriver=systemd"]

重启docker服务:
systemctl daemon-reload
systemctl restart docker

查看修改后状态:
docker info | grep Cgroup

修改cgroupdriver是为了消除安装k8s集群时的告警:

[WARNING IsDockerSystemdCheck]:

detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”.

Please follow the guide at https://kubernetes.io/docs/setup/cri/…

复习docker常用命令
docker -v
docker version
docker info
docker命令分类

Docker环境信息 — docker [info|version]

容器生命周期管理 — docker

[create|exec|run|start|stop|restart|kill|rm|pause|unpause]

容器操作管理 — docker [ps|inspect|top|attach|wait|export|port|rename|stat]

容器rootfs命令 — docker [commit|cp|diff]

镜像仓库 — docker [login|pull|push|search]

本地镜像管理 — docker [build|images|rmi|tag|save|import|load]

容器资源管理 — docker [volume|network]

系统日志信息 — docker [events|history|logs]

使用kubeadm快速安装
kubeadmkubeletkubectldocker-ce
版本初始化集群管理集群版本:1.17.5用于接收api-server指令,对pod生命周期进行管理版本:1.17.5集群命令行管理工具 版本:1.17.5推荐使用版本:19.03.8
安装yum源

新建repo文件

vi /etc/yum.repos.d/kubernates.repo

文件内容

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
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

如果repo_gpgcheck设为1,会进行校验,就会报错如下,所以这里设为0

repomd.xml signature could not be verified for kubernetes

更新缓存
yum clean all
yum -y makecache

验证源是否可用

yum list | grep kubeadm

如果提示要验证yum-key.gpg是否可用,输入y。
查找到kubeadm。显示版本

查看k8s版本

yum list kubelet --showduplicates | sort -r
安装k8s-1.17.5
yum install -y kubelet-1.17.5 kubeadm-1.17.5 kubectl-1.17.5
设置kubelet

增加配置信息

如果不配置kubelet,可能会导致K8S集群无法启动。为实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性。
vi /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
设置开机启动
systemctl enable kubelet
初始化镜像
查看安装集群需要的镜像
kubeadm config images list
编写执行脚本
mkdir -p /data
cd /data
vi images.sh

#!/bin/bash
# 下面的镜像应该去除"k8s.gcr.io"的前缀,版本换成kubeadm config images list命令获取到的版本
images=(
    kube-apiserver:v1.17.5
    kube-controller-manager:v1.17.5
    kube-scheduler:v1.17.5
    kube-proxy:v1.17.5
    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
执行脚本
给脚本授权
chmod +x images.sh

执行脚本
./images.sh

保存镜像

docker save -o k8s.1.17.5.tar \
k8s.gcr.io/kube-proxy:v1.17.5 \
k8s.gcr.io/kube-apiserver:v1.17.5 \
k8s.gcr.io/kube-controller-manager:v1.17.5 \
k8s.gcr.io/kube-scheduler:v1.17.5 \
k8s.gcr.io/coredns:1.6.5 \
k8s.gcr.io/etcd:3.4.3-0 \
k8s.gcr.io/pause:3.1

导入镜像

导入master节点镜像tar包

master节点需要全部镜像
docker load -i k8s.1.17.5.tar

导入node节点镜像tar包

node节点需要kube-proxy:v1.17.5和pause:3.1,2个镜像
docker load -i k8s.1.17.5.node.tar
初始化集群
配置k8s集群网络

calico官网地址

官网下载地址:
https://docs.projectcalico.org/v3.14/manifests/calico.yaml

github地址:
https://github.com/projectcalico/calico

下载calico.yaml
wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml
镜像下载
docker pull calico/cni:v3.14.2
docker pull calico/pod2daemon-flexvol:v3.14.2
docker pull calico/node:v3.14.2
docker pull calico/kube-controllers:v3.14.2

克隆并配置其他节点
配置hostname:
hostnamectl set-hostname k8s-master01
bash

hostnamectl set-hostname k8s-node01
bash

hostnamectl set-hostname k8s-node02
bash

hostnamectl set-hostname k8s-node03
bash

配置ip地址:
vi /etc/sysconfig/network-scripts/ifcfg-ens33

systemctl restart network
初始化集群信息:calico网络
kubeadm init --apiserver-advertise-address=192.168.198.156 --kubernetes-version v1.17.5 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.81.0.0/16
执行配置命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
node节点加入集群信息
复制初始化后返回的信息
kubeadm join 192.168.198.156:6443 --token kksfgq.b9bhf82y35ufw4np \
--discovery-token-ca-cert-hash sha256:e1e347e6db1db5c13fcdc2c7d51a2f9029100a4cc13c2d89a2dbfa5077f5b07f
查看集群节点状态
kubectl get nodes
执行calico.yaml
kubectl apply -f calico.yaml

查看各节点状态变化
kubectl get nodes -w
kubectl命令自动补全
echo "source <(kubectl completion bash)" >> ~/.bash_profile
source ~/.bash_profile
发送邮件问题
bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包。
echo "unset MAILCHECK">> /etc/profile
source /etc/profile

在你的 bash shell 中永久的添加自动补全
yum-key.gpg验证未通过
wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
rpm --import yum-key.gpg
rpm --import rpm-package-key.gpg
NameSpace

命名空间。 你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 可以为你提供组织,安全甚至性能方面的帮助!

查看命名空间
kubectl get namespace

查看所有命名空间的pod资源
kubectl get pod --all-namespaces
kubectl get pod -A

简写命令
kubectl get ns

说明

default 用户创建的pod默认在此命名空间
kube-public 所有用户均可以访问,包括未认证用户
kube-node-lease kubernetes集群节点租约状态,v1.13加入
kube-system kubernetes集群在使用
创建NameSpace
kubectl create namespace ns1

简写命令
kubectl create ns ns1
删除NameSpace
kubectl delete namespace ns1

简写命令
kubectl delete ns ns1
Pod

Pod是kubernetes集群能够调度的最小单元。Pod是容器的封装 。

在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被同一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器

查看Pod
查看default命名空间下的pods
kubectl get pods

查看kube-system命名空间下的pods
kubectl get pods -n kube-system

查看所有命名空间下的pods
kubectl get pod --all-namespaces
kubectl get pod -A
创建Pod

下载镜像

K8S集群的每一个节点都需要下载镜像:选择不同的基础镜像,下载镜像的大小也不同。
docker pull tomcat:9.0.20-jre8-alpine
docker pull tomcat:9.0.37-jdk8-openjdk-slim
docker pull tomcat:9.0.37-jdk8

同学们可以自行下载后进行备份。
docker save -o tomcat9.tar tomcat:9.0.20-jre8-alpine
docker load -i tomcat9.tar

运行pod

在default命名空间中创建一个pod副本的deployment
kubectl run tomcat9-test --image=tomcat:9.0.20-jre8-alpine --port=8080
kubectl get pod
kubectl get pod -o wide

使用pod的IP访问容器
curl ***:8080
扩容
将副本扩容至3个
kubectl scale --replicas=3 deployment/tomcat9-test

kubectl get deployment
kubectl get deployment -o wide

使用deployment的IP访问pod

删除deployment
kubectl delete deployment tomcat9-test

创建服务

kubectl expose deployment tomcat9-test --name=tomcat9-svc --port=8888 --target-port=8080 --protocol=TCP --type=NodePort

查看端口号
kubectl get svc
kubectl get svc -o wide

访问服务端口
curl 10.105.225.0:8888

访问集群外端口
http://192.168.198.156:32500
kubectl常用命令练习
语法规则
kubectl [command] [TYPE] [NAME] [flags]

其中 command 、 TYPE 、 NAME 和 flags 分别是:

command :指定要对一个或多个资源执行的操作,例如 create 、 get 、 describe 、 delete 。

TYPE :指定资源类型。资源类型不区分大小写,可以指定单数、复数或缩写形式。例如,以下命令输出相同的结果:

kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1

NAME :指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息 kubectl get pods 。

在对多个资源执行操作时,您可以按类型和名称指定每个资源,或指定一个或多个文件:

要按类型和名称指定资源:

​ 要对所有类型相同的资源进行分组,请执行以下操作: TYPE1 name1 name2 name<#> 。

​ 例子: kubectl get pod example-pod1 example-pod2

​ 分别指定多个资源类型: TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#> 。

​ 例子: kubectl get pod/example-pod1 replicationcontroller/example-rc1

​ 用一个或多个文件指定资源: -f file1 -f file2 -f file<#>

​ 使用 YAML 而不是 JSON 因为 YAML 更容易使用,特别是用于配置文件时。

​ 例子: kubectl get pod -f ./pod.yaml

flags : 指定可选的参数。例如,可以使用 -s 或 -server 参数指定 Kubernetes API 服务器的地址和端口。

注意

从命令行指定的参数会覆盖默认值和任何相应的环境变量。

get命令

kubectl get - 列出一个或多个资源。

# 查看集群状态信息
kubectl cluster-info

# 查看集群状态
kubectl get cs

# 查看集群节点信息
kubectl get nodes

# 查看集群命名空间
kubectl get ns

# 查看指定命名空间的服务
kubectl get svc -n kube-system

# 以纯文本输出格式列出所有 pod。
kubectl get pods

# 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。
kubectl get pods -o wide

# 以纯文本输出格式列出具有指定名称的副本控制器。提示:您可以使用别名 'rc' 缩短和替换'replicationcontroller' 资源类型。
kubectl get replicationcontroller <rc-name>

# 以纯文本输出格式列出所有副本控制器和服务。
kubectl get rc,services

# 以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集。
kubectl get ds --include-uninitialized

# 列出在节点 server01 上运行的所有 pod
kubectl get pods --field-selector=spec.nodeName=server01
describe命令

kubectl describe - 显示一个或多个资源的详细状态,默认情况下包括未初始化的资源。

# 显示名称为 <node-name> 的节点的详细信息。
kubectl describe nodes <node-name>

# 显示名为 <pod-name> 的 pod 的详细信息。
kubectl describe pods/<pod-name>

# 显示由名为 <rc-name> 的副本控制器管理的所有 pod 的详细信息。
# 记住:副本控制器创建的任何 pod 都以复制控制器的名称为前缀。
kubectl describe pods <rc-name>

# 描述所有的 pod,不包括未初始化的 pod
kubectl describe pods --include-uninitialized=false

说明: kubectl get 命令通常用于检索同一资源类型的一个或多个资源。 它具有丰富的参数,允许您使用 -o 或 --output 参数自定义输出格式。您可以指定 -w 或 --watch 参数以开始观察特定对象的更新。 kubectl describe 命令更侧重于描述指定资源的许多相关方面。它可以调用对 API 服务器 的多个 API 调用来为用户构建视图。 例如,该 kubectl describe node 命令不仅检索有关节点的信息,还检索在其上运行的 pod 的摘要,为节点生成的事件等。

delete命令

kubectl delete` - 从文件、stdin 或指定标签选择器、名称、资源选择器或资源中删除资源。

# 使用 pod.yaml 文件中指定的类型和名称删除 pod。
kubectl delete -f pod.yaml

# 删除标签名= <label-name> 的所有 pod 和服务。
kubectl delete pods,services -l name=<label-name>

# 删除所有具有标签名称= <label-name> 的 pod 和服务,包括未初始化的那些。
kubectl delete pods,services -l name=<label-name> --include-uninitialized

# 删除所有 pod,包括未初始化的 pod。
kubectl delete pods --all

进入容器命令

kubectl exec - 对 pod 中的容器执行命令。与docker的exec命令非常类似

# 从 pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
kubectl exec <pod-name> date

# 运行输出 'date' 获取在容器的 <container-name> 中 pod <pod-name> 的输出。
kubectl exec <pod-name> -c <container-name> date

# 获取一个交互 TTY 并运行 /bin/bash <pod-name >。默认情况下,输出来自第一个容器。
kubectl exec -ti <pod-name> /bin/bash
logs命令

kubectl logs - 打印 Pod 中容器的日志。

# 从 pod 返回日志快照。
kubectl logs <pod-name>

# 从 pod <pod-name> 开始流式传输日志。这类似于 'tail -f' Linux 命令。
kubectl logs -f <pod-name>
格式化输出
将pod信息格式化输出到一个yaml文件
kubectl get pod web-pod-13je7 -o yaml
强制删除pod
强制删除一个pod
--force --grace-period=0
资源缩写
缩写汇总
资源名缩写名API分组按命名空间资源类型
confifigmapscm-trueConfifigMap
namespacesnsfalseNamespace
nodesnofalseNode
persistentvolumeclaimspvctruePersistentVolumeClaim
persistentvolumespvfalsePersistentVolume
podspotruePod
secretstrueSecret
serviceaccountssatrueServiceAccount
servicessvctrueService
daemonsetsdsappstrueDaemonSet
deploymentsdeployappstrueDeployment
statefulsetsstsappstrueStatefulSet
horizontalpodautoscalershpaautoscalingtrueHorizontalPodAutoscaler
cronjobscjbatchtrueCronJob
jobsbatchtrueJob
ingressesingextensionstrueIngress
poddisruptionbudgetspdbpolicytruePodDisruptionBudget
clusterrolebindingsrbac.authorization.k8s.iofalseClusterRoleBinding
clusterrolesrbac.authorization.k8s.iofalseClusterRole
rolebindingsrbac.authorization.k8s.iotrueRoleBinding
rolesrbac.authorization.k8s.iotrueRole
storageclassesscstorage.k8s.iofalseStorageClass
idea安装k8s插件
idea插件官网地址

https://plugins.jetbrains.com/

kubernetes地址:

https://plugins.jetbrains.com/plugin/10485-kubernetes

查找对应自己idea版本的k8s插件信息

help->about->查看idea内部版本信息 一定要注意版本信息,否则无法安装

离线安装k8s插件
因国外网站网速较慢,在线安装有安装失败的危险。推荐大家下载idea对应版本的插件后,进行离线安装

193.5662.65
settings->plugins->Install Plugin from Disk->插件安装目录

安装完成后重启idea开发工具
idea配置SSH客户端

目标:在idea中打开终端操作k8s集群master节点。

idea配置
settings->Tools->SSH Configurations->新建
使用SSH客户端
Tools->Start SSH session->选择我们刚刚配置的ssh客户端名称
新建yml类型文件

idea默认没有yml文件类型。可以通过new->fifile->手工输入*.yml创建yml类型文件。也可以通过配置增加yml类型文件。

settings->Edtior->File and Code Template->file->+(新建)
Remote Host

目标:将idea工程中的文件上传k8s集群master节点。

idea配置
Tools->Deployment->Configurations->配置Remote Host
使用Remote Host

可以将本工程中的文件上传k8s集群

idea配置NameSpace
创建NameSpace
操作指南:
settings->Editor->Live Template->Kubernetes->查看自动生成的模板信息内容
namespace.yml

在文件中输入kres,根据模板快速生成yml文件信息

apiVersion: v1
kind: Namespace
metadata:
  name: ns1

通过idea的Remote Host快速将yml文件上传k8s集群进行测试

mkdir -p /data/namespaces
cd /data/namespaces

kubectl apply -f namespace.yml
删除NameSpace
kubectl delete -f namespace.yml
idea配置pod
创建pod

在idea工程resource/pod/tomcatpod.yml

apiVersion: v1
kind: Pod
metadata:
  name: tomcat9
  labels:
    app: tomcat9
spec:
  containers:
    - name: tomcat9
      image: tomcat:9.0.20-jre8-alpine
      imagePullPolicy: IfNotPresent
  restartPolicy: Always

镜像下载策略、重启策略

imagePullPolicy:
	Always:总是拉取 pull
	IfNotPresent:如果本地有镜像,使用本地,如果本地没有镜像,下载镜像。
	Never:只使用本地镜像,从不拉取
restartPolicy:
	Always:只要退出就重启。
	OnFailure:失败退出时(exit code不为0)才重启
	Never:永远不重启
运行pod
kubectl apply -f tomcatpod.yml
测试pod
curl 10.81.58.196:8080

删除pod

kubectl delete -f tomcatpod.yml
idea配置deployment
创建deployment

在idea工程resource/deployment/tomcatdeployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat-deployment
spec:
  replicas: 3
  template:
    metadata:
      name: tomcat-deployment
      labels:
        app: tomcat
      spec:
        containers:
          - name: tomcat-deployment
            image: tomcat:9.0.20-jre8-alpine
            imagePullPolicy: IfNotPresent
        restartPolicy: Always
  selector:
    matchLabels:
      app: tomcat

matchLabels

总结:
在Deployment中必须写matchLables
在定义模板的时候必须定义labels,因为Deployment.spec.selector是必须字段,而他又必须和template.labels对应
运行deployment
kubectl apply -f tomcatdeployment.yml
控制器类型
控制器名称作用
Deployment声明式更新控制器,用于发布无状态应用
ReplicaSet副本集控制器,用于对Pod进行副本规模 扩大或剪裁
StatefulSet有状态副本集,用于发布有状态应用
DaemonSet在k8s集群每一个Node上运行一个副本, 用于发布监控或日志收集类等应用
Job运行一次性作业任务
CronJob运行周期性作业任务
Deployment控制器介绍

具有上线部署、滚动升级、创建副本、回滚到以前某一版本(成功/ 稳定)等功能。

Deployment包含ReplicaSet,除非需要自定义升级功能或者根本不需要升级Pod,否则还是建议使用Deployment而不直接使用ReplicaSet 。

删除Deployment
kubectl delete -f tomcatdeployment.yml
idea配置service
创建service

在idea工程resource/service/tomcatservice.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deploy
  labels:
    app: tomcat-deploy
spec:
  replicas: 1
  template:
    metadata:
      name: tomcat-deploy
      labels:
        app: tomcat-pod
    spec:
      containers:
        - name: tomcat-deploy
          image: tomcat:9.0.20-jre8-alpine
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
      restartPolicy: Always
  selector:
    matchLabels:
      app: tomcat-pod
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
spec:
  selector:
    app: tomcat-pod
  ports:
    - port: 8888
      targetPort: 8080
      nodePort: 30088
      protocol: TCP
  type: NodePort

service的selector

请各位小伙伴注意:
service.spec.selector.app选择的内容仍然是template.label.app内容。而不是我们deployment控制器的label内容

Service类型

ClusterIP:默认,分配一个集群内部可以访问的虚拟IP
NodePort:在每个Node上分配一个端口作为外部访问入口
LoadBalancer:工作在特定的Cloud Provider上,例如Google Cloud,AWS,OpenStack
ExternalName:表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信

Service参数

port :访问service使用的端口
targetPort :Pod中容器端口
NodePort: 通过Node实现外网用户访问k8s集群内service(30000-32767)
运行service
kubectl apply -f tomcatservice.yml
删除service
kubectl delete -f tomcatservice.yml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值