主頁 >  其他 > 容器學習筆記

容器學習筆記

2021-09-11 16:27:23 其他

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 # 網路資料采集分析工具(抓包)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299300.html

標籤:其他

上一篇:Bat強制洗掉電腦檔案

下一篇:Nacos,我也許入門了

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more