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