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,我也許入門了
