当前位置:首页 » 《资源分享》 » 正文

容器学习笔记_Liangmu

20 人参与  2021年10月02日 11:43  分类 : 《资源分享》  评论

点击全文阅读


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 # 网络数据采集分析工具(抓包)

点击全文阅读


本文链接:http://zhangshiyu.com/post/29184.html

容器  镜像  查看  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1