Kubernetes安装与基础配置

  • Post author:
  • Post category:其他




Kubernetes安装与基础配置


kubernetes官网地址

https://kubernetes.io/

kubernets中文社区地址:

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


硬件安装要求


序号

硬件

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


演示集群节点

主机名 主机

IP
k8s-master01 192.168.198.156
k8s-node01 192.168.198.157
k8s-node02 192.168.198.158
k8s-node03 192.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快速安装





kubeadm

kubelet

kubectl

docker-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分组

按命名空间

资源类型
confifigmaps cm true ConfifigMap
namespaces ns false Namespace
nodes no false Node
persistentvolumeclaims pvc true PersistentVolumeClaim
persistentvolumes pv false PersistentVolume
pods po true Pod
secrets true Secret
serviceaccounts sa true ServiceAccount
services svc true Service
daemonsets ds apps true DaemonSet
deployments deploy apps true Deployment
statefulsets sts apps true StatefulSet
horizontalpodautoscalers hpa autoscaling true HorizontalPodAutoscaler
cronjobs cj batch true CronJob
jobs batch true Job
ingresses ing extensions true Ingress
poddisruptionbudgets pdb policy true PodDisruptionBudget
clusterrolebindings rbac.authorization.k8s.io false ClusterRoleBinding
clusterroles rbac.authorization.k8s.io false ClusterRole
rolebindings rbac.authorization.k8s.io true RoleBinding
roles rbac.authorization.k8s.io true Role
storageclasses sc storage.k8s.io false StorageClass



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



版权声明:本文为qq_41539088原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。