Kubernetes学习记录
编写:梁木
- 20210907 第一次编写
- 20210908 追加内容
- 202210909 整理更新
- 20210910 整理更新
容器学习
地址:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com)
1. 安装容器镜像yum源
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 wget
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 检查是否配置成功
yum repolist
2. Kubernetes 镜像配置
# 配置yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 检查是否配置成功
yum repolist
3.容器
轻量级虚拟化技术,核心为Namepace + Cgroup,主机上展现形式为进程
Namespace实现资源隔离,Cgroup 是对隔离资源限制(CPU、MEM、IO等)
# 容器中六个namespace UTS CLONE_NEWUTS 主机名或域名 IPC CLONE_NEWIPC 信号量、消息队列和共享内存 PID CLONE_NEWPID 进程编号 Network CLONE_NEWNET 网络设备、网络战、端口等 Mount CLONE_NEWNS 挂载点(文件系统) User CLONE_NEWUSER 用户组和用户组
3.1 容器基本操作
# 启动docker
systemctl start docker
systemctl status docker
# 查看docker ps 查看运行的容器 -a 查看所有容器 -q 只打印容器id
docker ps
# 拉取镜像进行启动
# docker run常用命令:
# -i 交互式
# -t 提交给终端
# -d 后台运行(nginx,tomcat,mysql)
# --name 容器名称(规范要求)
# --network 网络
# -- publish / -p 端口映射
# -v 挂载卷
docker run -d --name nginx nginx:alpine # 示例,没有镜像则拉取,从官方拉取nginx
docker ps # 查看是否启动
# IP访问"IPAddress": "172.17.0.2"
curl 172.17.0.2
# docker exec 进入容器
# -t 终端显示(tty)
# sh命令 进入shell
docker exec busybox ls
docker exec -
# docker 操作:
# docker logs 查看容器运行日志
docker logs nginx
# docker search 搜索镜像
# docker pull IMAGE 拉取镜像
# docker stop 停止容器
# docker create 创建容器
# docker start 启动容器
# docker run = docker create + docker start
# docker rm 删除容器(要先停止)
# docker images 查看镜像列表
# docker rmi 删除镜像 -f 强制删除
docker rmi -f nginx:alpine
# docker build 打包镜像:
vim Dockerfile # 固定的名字
###
FROM centos:centos7.6.1810
RUN yum install -y bind-utils tcpdump
ADD code /data/code/
###
docker build -t centos:v1 # 从当前目录查找Dockerfile 创建容器镜像
# docker commit 基于容器快照制作镜像
docker commit -a author -m message container image
# docker cp 宿主机和容器间文件复制 源》目标
docker cp 1 busybox:/tmp
# docker rename 容器改名
docker rename nginx ngix1
# docker save 镜像打包保存 -o 文件输出
docker save -o nginx-image.tar nginx:alpine
# docker load 镜像加载复原 -i 文件输入
docker load -i nginx-image.tar
# 查看容器运行信息
# 查看镜像信息
# docker inspect 查看容器信息
# -f {{.Mount}} 容器id 查看其他信息
docker inspect nginx
docker inspect nginx:alpine
# docker stats 查看容器资源
# docker version 查看容器版本
# docker top # 查看容器进程信息
# docker system info 查看docker运行信息
# 创建容器会创建一个网卡
# docker login
# docker tag 打标签
# docker pull
# docker push
# 默认加载文件/etc/docker/daemon.json
# 手动配置:
# 工作目录 (default:/var/lib/docker /data:)
# 非安全仓库,hub仓库(hub.canway.org/nginx:latest)
# 格外启动参数
# 修改后重启docker进程
"""
{
"bip":"1.0.0.1/16", # 修改网关,格外启动参数
"data-root":"/data", # 修改工作目录,会将文件都转移,docker ps 会查不到
"insecure-registries": ["0.0.0.0/0","https://www.aliyun.com"] # 非安全仓库
}
"""
# 查看文件
systemctl cat docker
3.2 容器网络
# 查看日志
journalctl -xeu docker --no-pager
# 列出docker网络
docker network list
# 安装工具
yum -y install bridge-utils
brctl show docker0
# 查看接口ip
ip link show
# bridge 不加--network 默认为桥接
# host --network host
# none 常用于病毒测试
# container 联盟式网络:可以将两个容器的网络进行共享,但不与宿主机共享 --network container:nginx
# 要先启动第一个容器,再启动第二个进行联盟式网络共享
# 查看端口占用(nginx:alpine默认端口为80)
ss -tnlp | grep 80
netstat -tnlp | grep 80
# --network
# -p 81:80 把容器的80端口映射到宿主机的81端口
docker run -d --name nginx01 --network host nginx:alpine
# 查看连接
curl http://10.10.24.76
curl 10.10.24.76:80
curl 10.10.24.76
# 在容器里查看连接
wget -O - http://127.0.0.1
wget -O - localhost
# container网络共享
docker run -d --name nginx1 nginx:alpine
docker run -d --name tomcat1 --network container:nginx1 tomcat
docker inspect nginx1 |grep id
ll /proc/16797/ns
docker inspect tomcat1 |grep id
ll /proc/18575/ns
# net -> net:[4026532613] 显示的net为同一个
# 限制cpu核数 cpus方法
docker run -itd --name nginx01 --cpus 3 nginx:alpine
docker exec -it nginx01 sh
cd /sys/fs/cgroup/cpu,cpuacct
cat cpu.cfs_quota_us
# 输出300000
# 限制cpu核数 cpuset方法
docker run -itd --name nginx02 --cpuset-cpus 0-5 nginx:alpine
docker exec -it nginx02 sh
cd /sys/fs/cgroup/cpuset
cat cpuset.cpus
# 输出0-5
4.Kubernetes 介绍
一种容器编排系统,Google开源,
控制平面master → 负载节点node pool
4.1master:
apiserver:网关、路由器:认证、授权、准入控制
controller manager :查看当前状态和用户状态,控制器组合
scheduler:调度器 ,预选:排除不符合节点,优选:符合节点打分
etcd :唯一存储
4.2Node:
kubelet:负载容器的创建等操作。接收来自apiserver指令向apiserver汇报自身状态消
kube-proxy :定期从apiserver获取服务的定义,生成iptables/ipvs规则
docker
4.3集群共用
CoreDNS 域名解析
Network plugin ip
4.4pod
pod 包含一个或多个container
Kubernetes中调度的最小单元
共享网络及外部挂载的存储
4.Kubernetes部署
4.1环境准备
# 检查yum源,!的要清理一下,再重新检查
yum repolist
yum clean all
yum repolist
# 环境准备:
# OS: centos7.6
# 主机: 三台(1 master, 2 node)
# 前提条件:
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 关闭swap,kubernaetes不支持swap资源计算打分
free -mh
swapoff -a
# vi /etc/fstab ,将挂载的swap注释掉
# 同步时间
date
yum -y install ntpdate
ntpdate ntp.aliyun.com
# 配置hosts
# 修改主机名
# 修改/etc/hosts文件 添加ip主机名
# 改完主机名没变,刷新
bash
# 环境初始化:
# 配置yum仓库
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
EOF
# 内核参数、模块配置
# config(ipvs)
# 配置ipvs内核(可选)
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
modprobe br_netfilter
EOF
# 不做这步服务访问可能会出现问题
# 查看是否生效
source /etc/sysconfig/modules/ipvs.modules
lsmod | grep nf_conntrack
lsmod | grep br_netfilter
# 配置k8s bridge args
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 不做这步服务访问可能会出现问题
# 查看是否生效
sysctl --system
# 配置docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"data-root": "/data/docker"
}
EOF
systemctl restart docker
systemctl enable docker
4.2开始部署
# 部署集群组件(三个一起装,不然会有依赖问题)
yum -y install kubeadm-1.18.9 kubectl-1.18.9 kubelet-1.18.9
# 启动kubelet
systemctl start kubelet
systemctl enable kubelet
# 工作机制:读取pod manifests and start it
# 三种方式:
# staticPodPath(apiserver,controller manager,scheduler)
# 静态pod路径
# /etc/kubernetes/manifests/
# etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml
# https url
# apiserver(apiserver and kubelet) 通过kubectl apply -f 文件
# 初始化kubernetes cluster
# 只在master操作
# 不加--image-repository 则默认从国外拉起镜像
kubeadm init \
--kubernetes-version=v1.18.9 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
# 成功后执行
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 APISERVER_ADDRES --token (kubeadm token list) --discovery-token-ca-cert-hash
# kubeadm token list 查看token
kubeadm join 10.10.24.76:6443 --token n48lar.yyj328vs7hsh6tpt \
--discovery-token-ca-cert-hash sha256:d36bbd2b709d6aa786533229c7d007302ff7625833fe88542f89b4e22be611a0
# 查看节点(master)
kubectl get nodes
# 出错重置
# kubeadm reset
# 根据最后提示删除相关文件
# postinstallation
# CNI容器网络接口 应用文件(github.com/flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 文件出错执行kubectl delete -f kube-flannel.yml 删除相应容器
# 查看pod
kubectl get pod -n kube-system
# kubectl configure file :Kubeconfig
kubectl get pod -n kube-system --kubeconfig=/root/.kube/config
# 查看镜像列表
kubeadm config images list
4.3kubectl命令
4.3.1bash命令补全
# bash命令补全
yum install bash-completion -y
# https://kubernetes.io/docs/reference/kubectl/cheatsheet/
source <(kubectl completion bash)
# setup autocomplete in bash into the current shell, bash-completion package should be installed first.
echo "source <(kubectl completion bash)" >> ~/.bashrc
echo "alias kd='kubectl get pod'" >> ~/.bashrc
# add autocomplete permanently to your bash shell.
# 可修改~/.bashrc 设置别名
# 完成后bash重新进入bash生效
# 永久生效
alias k=kubectl
complete -F __start_kubectl k
4.3.2kubectl命令操作
# kubectl命令操作:
# kubectl api-resources 查看缩写
# kubectl apply -f 文件
# kubectl delete -f 文件
# kubectl get 选项:-owide 查看ip、主机名等更多信息 -w 动态查看
# kubectl create 创建
# kubectl expose
# kubectl set image
# kubectl rollout 回滚
# kubectl scale
# kubectl top
#
# kubectl explain 查看资源说明
# kubectl edit 在线更新
# kubectl label 打标签
# kubectl label node node01 node-role.kubernetes.io/node="node1"
kubectl get node --show-labels # 查看标签
# 排除问题:
# describe 启动前
# logs 启动后
# 查看namespace
kubectl get namespace # ns也行
# 查看资源说明
kubectl explain pod
kubectl explain pod.spec
kubectl explain pod.spec.containers
kubectl explain pod.spec.volumes
# 创建命名空间canway
kubectl create ns canway
# kubectl 进入容器终端
kubectl exec -it nginx -n canway -c nginx -- sh
# Volume:
# volume(挂载源):
# name,类型(如hostPath,该pod调度运行的节点上的路径)》宿主机的目录
# volumeMounts:
# name(应用挂载源的名称) mountPath(挂载点,容器目录)
# object 对象,不用-,列表要加-
# kubectl get all 查看
# kubectl get pod 查看的二级控制器 -w 动态查看
# kubectl get deloy -oyaml
# kubectl delete deploy -n 才能删除
# 更新:
# 命令行:--dry-run -oymal >文件 试运行并写入文件
#kubectl set image KIND(Deployment) kind_name(deploy-nginx) container_name(nginx)=new_image(nginx:latest) -n namespace(canway)
kubectl set image deploy deploy-nginx nginx=nginx:latest -n canway
# kubectl edit deployment -n canway deploy-nginx
# 会打开配置文件修改
# vim修改源文件:kubectl apply -y deploy.yaml
# 扩缩容
# kubectl scale deploy deploy-nginx --replicas=0 -n canway
# kubectl edit
# vim修改源文件:kubectl apply -y deploy.yaml
# kubectl patch 高级更新修改
# kubectl patch deployment deploy-nginx -p '{"spec":{"template":{"spec":{"containers":[{"image":"nginx:alpine","name":"nginx"}]}}}}' -n canway
# 资源限制;
# spec.containers.resources.{request,limits}
# 定向调度:
# 预选(排除法),优选(打分)
kubectl edit deployment deploy-nginx -n canway
# 通过修改文件将容器调度到特定节点
kubectl get node --show-labels
4.3.3pod简单编写
# 创建一个文件
vim containers-pod.yml
# 可以查看资源说明
kubectl explain pod
kubectl explain pod.spec
kubectl explain pod.spec.containers
kubectl explain pod.spec.volumes
# <[]Object> 对象列表,需要加-
# <boolean> 布尔类型,true或false
# <string> 字符串
# <integer> 整数
# <Object> 对象
# 写入以下内容
###
apiVersion: v1
kind: Pod # 类型
metadata: # 元数据
name: nginx # pod类型的名称,get pod 可以看到
namespace: canway # 使用的命名空间
spec:
nodeName: node01 # 定向调度
hostNetwork: true # 直接访问宿主机端口,用容器的端口
volumes: # 挂载源,在宿主机
- name: work-dir
hostPath:
path: /opt/nginx
initContainers: # 初始化容器设置,在container之前执行,仅当initcontainer成功 执行完退出
- name: centos-init
image: centos:centos7.6.1810
command: ["sh"]
args: ["-c","echo 'hello!'>/data/kug.jsp"] # 执行命令将文件写入,jsp格式为tomcat默认格式,可以随意修改; 可不用args选项:command: ["sh", "-c", "echo 'hello initcontainer' > /data/init.html"]
volumeMounts: # 容器挂载的位置
- name: tomcat-workdir
mountPath: /data
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
ports:
- name: http-port
containerPort: 80
volumeMounts:
- name: work-dir
mountPath: /usr/share/nginx/html/kug.jsp # nginx访问的位置默认都是目录
subPath: kug.jsp # 将kug.jsp定义为文件,没有后缀则会直接下载,其他后缀如txt、html可以查看
- name: busybox
image: busybox # 镜像使用,不加:版本则默认latest
imagePullPolicy: IfNotPresent
tty: true # 给容器终端,不然有些会直接结束
stdin: true # 给容器输入
volumeMounts:
- name: work-dir
mountPath: /opt/container/busybox
- name: tomcat
image: tomcat
ports:
- name: http-port
containerPort: 8080 # tomcat容器端口为8080
volumeMounts:
- name: tomcat-workdir
mountPath: /usr/local/tomcat/webapps/ROOT # tomcat网络访问位置
resources: # 资源限制
requests: # 最小
memory: "80Mi" # 内存限制
cpu: "100m" # cpu限制,1000m为1核
limits: # 最大
memory: "200Mi"
cpu: "200m"
###
# 查看删除
kuberctl apply -f nginx-pod.yml # 工作机制:apiServer读取
kuberctl get pod -n canwat
kubectl logs -n canway nainx
kubectl delete pod -n canway nainx
# 删除后将文件nginx-pod.yml加到静态路径自启,工作机制:静态路径读取
模板及说明
apiVersion: v1 #版本号
kind: Pod #Pod
metadata: #元数据
name: string #Pod名称
namespace: string #Pod所属的命名空间
labels: #自定义标签
- name: string #自定义标签名字
annotations: #自定义注释列表
- name: string
spec: #Pod中容器的详细定义
containers: #Pod中容器列表
- name: string #容器名称
image: string #容器的镜像名称
imagePullPolicy: [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
command: [string] #容器的启动命令列表,如不指定,使用打包时使用的启动命令
args: [string] #容器的启动命令参数列表
workingDir: string #容器的工作目录
volumeMounts: #挂载到容器内部的存储卷配置
- name: string #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符
readOnly: boolean #是否为只读模式
ports: #需要暴露的端口库号列表
- name: string #端口号名称
containerPort: int #容器需要监听的端口号
hostPort: int #容器所在主机需要监听的端口号,默认与Container相同
protocol: string #端口协议,支持TCP和UDP,默认TCP
env: #容器运行前需设置的环境变量列表
- name: string #环境变量名称
value: string #环境变量的值
resources: #资源限制和请求的设置
limits: #资源限制的设置
cpu: string #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
memory: string #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests: #资源请求的设置
cpu: string #Cpu请求,容器启动的初始可用数量
memory: string #内存请求,容器启动的初始可用数量
livenessProbe: #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
exec: #对Pod容器内检查方式设置为exec方式
command: [string] #exec方式需要制定的命令或脚本
httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket: #对Pod内个容器健康检查方式设置为tcpSocket方式
port: number
initialDelaySeconds: 0 #容器启动完成后首次探测的时间,单位为秒
timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
periodSeconds: 0 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged:false
restartPolicy: [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
nodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定
- name: string
hostNetwork:false #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes: #在该pod上定义共享存储卷列表
- name: string #共享存储卷名称 (volumes类型有很多种)
emptyDir: {} #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
hostPath: string #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
path: string #Pod所在宿主机的目录,将被用于同期中mount的目录
secret: #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
scretname: string
items:
- key: string
path: string
configMap: #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
name: string
items:
- key: string
path: string
4.3.4 deployment简单编写
# Deployment(无状态类型,支持动态更新),statefulSet(有状态MYSQL,ES),DaemonSet(每个Node节点只启动一个pod),Job
###
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx
namespace: canway
spec:
selector:
matchLabels:
app: ng
web: nginx
template:
metadata:
labels:
app: ng
web: nginx
front: website # 这里的标签要比selector的多
spec:
containers:
- name: nginx
image: nginx:alpine
imagePullPolicy: IfNotPresent
ports:
- name: http-port
containerPort: 80
env: # 环境变量设置,这里举例的是mysql的密码设置
- name: MYSQL_ROOT_PASSWORD
value: "123456" # 这个值为字符串,全为数字要加引号,不然会出错
###
4.3.5service 简单编写
# service缩写svc
# kubectl creat svc
# service网络访问模式:
# 1.clusterIP: tomcat-svc.canway.svc.cluster.local(tomcat-svc.canway) 客户端在集群内
# 域名命名规则 service名称.命名空间.svc.cluster.local 对应ip coreDNS的ip
# 将clusterIP写到/etc/resolv.conf 可以在其他机器进行域名解析
# 2.NodePort: 客户端在集群外,端号范围30000-32767,通过宿主机ip:nodeport
# 在pod中spec.hostnetwork=true相同效果,只是hostnework使用的是容器的端口,NodePort使用的是自定义端口
# 抓包: tcpdump -i any -nn -vv udp port 53 时间比较长
# dig 域名,解析出ip则正常
# ping 域名,也能看到解析的ip 这个ip是虚拟的,不能ping通
###
apiVersion: v1
kind: Service
metadata:
name: tomcat-svc # service名称
namespace: canway
spec:
selector:
app: ng # service 通过标签和端口查找容器
web: nginx
ports:
- name: http-port
port: 8080 # 映射到sevice的端口,可更改
targetPort: 8080 # 容器端口,只是写出来给人看,不会改变,tomcat端口为8080,nginx 端口为80
# nodePort: 3000 # nodeport模式占用宿主机3000端口
# type: NodePort # NodePort: 客户端在集群外
---
# centos: centos7.6.1810
apiVersion: apps/v1
kind: Deployment
metadata:
name: centos7
namespace: canway
spec:
selector:
matchLabels:
app: centos
template:
metadata:
labels:
app: centos
spec:
containers:
- name: centos7
image: centos:centos7.6.1810
tty: true
stdin: true
###
service 模板说明
apiVersion: v1 # 资源版本
kind: Service # 资源类型
metadata: # 元数据
name: service # 资源名称
namespace: dev # 命名空间
spec: # 具体描述
selector: # 标签选择器,用于确定当前service的代理哪些pod
app: nginx
type: # Service类型,指定service的访问方式
clusterIP: # 虚拟服务的ip地址
sessionAffinity: # session亲和性,支持ClienetIP、None两个选项
ports: # 端口信息
- protocol: TCP
port: 80 # service端口
targetPort: 80 # pod端口
nodePort: 30000 # 主机端口
4.3.6进入mysql容器
# 进入方式:
# 1 .通过cluster虚拟ip(会变化) 客户端为NodeIP
kubectl get pod -n database -owide #查找ip
mysql -h 10.244.2.13 -p123456
# 2.通过service虚拟ip
kubectl get svc -n database -owide #查找ip
mysql -h10.98.88.227 -p123456
# 3.通过域名(域名解析需要coreDNS)coreDNS ip 10.96.0.10 查看:kubectl get svc -n kube-system
mysql -h mysql-svc.database.svc.cluster.local -p123456
4.3.7configmap 简单编写
# configmap (配置文件挂载到容器内,nginx.conf)
# --from-file[=key] key为文件名(挂载到文件内部的文件名),文件内容(file)为挂载到容器内部的文件,内容较多(需要挂载到容器内部的文件)
# --from-literal=key=value value为文件内容(挂载到容器内部的文件内容),内容较少(需要挂载到容器内部的文件)
# --dry-run -oyaml > 将操作重定向到文件,不用手动写,示例:(需要存在/index.html)
kubectl create configmap map --from-file=index.html=./index.html -n canway --dry-run -oyaml >configmap.yaml
#生成的文件内容:
###
apiVersion: v1
data:
index.html: | # 文件内容
dadadadadadada
kind: ConfigMap
metadata:
creationTimestamp: null
name: map
namespace: canway
###
其他笔记
快捷命令
# linux快捷命令
# ctrl r 寻找历史命令,可以在写命令时补全
history > history重定向 # 先执行history
# stat 查看时间戳
# vim 命令
# ZZ保存退出
# gg跳到开头
# GG跳到末尾
# o在后面换行并插入
# :e! 放弃所有修改,并打开原来文件
# xshell
# alt + 数字 切换标签
yum工具
yum -y install \
nmap-ncat # 探测端口
nmap # 局域网扫描
tcpdump # 网络数据采集分析工具(抓包)