sh
cat /etc/issue
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
docker run --rm -it --name=python python:3.11-slim /bin/bash
docker system df
docker-compose --compatibility up -d
docker-compose build --force-rm --no-cache
docker-compose down & docker volume prune
docker-compose build --force-rm --no-cache
docker-compose down --rmi all -v
docker compose down -v --remove-orphans --rmi="all"
docker compose down -v --remove-orphans --rmi="local"
sudo docker compose --compatibility up -d --build --force-recreate --renew-anon-volumes --remove-orphans –always-recreate-deps
docker compose --compatibility up -d --build --remove-orphans --pull=always --renew-anon-volumes --always-recreate-deps
sudo docker compose build --no-cache && sudo docker compose up -d --compatibility up -d --renew-anon-volumes --remove-orphans
docker-compose --compatibility up -d --renew-anon-volumes --remove-orphans
docker-compose up -d --build &&docker-compose restart
sudo docker compose build --no-cache && sudo docker compose up -d --scale mysql-go=50
sudo docker compose --compatibility up -d --build --force-recreate --renew-anon-volumes --remove-orphans
docker compose -f xxx.yml build --no-cache
systemctl list-units --type=service --state=running
sudo docker stop $(sudo docker ps -a -q)
sudo docker start $(sudo docker ps -a -q)
sudo docker rm $(sudo docker ps -a -q)
sudo docker rmi $(sudo docker images -q)
sudo docker rmi $(sudo docker images | grep "none" | awk '{print $3}')
sudo docker rmi $(sudo docker images -f "dangling=true" -q)
sudo docker system prune --volumes -f
sudo docker system prune -a
sudo docker system prune --all --volumes -f
du -Sh /var/lib/docker/overlay2 | sort -nr | head -n10
docker rmi -f $(docker images -aq)
docker pull --platform=arm64 --username=your_username --password=your_password your_registry/image_name:tag
docker image prune
docker cp elasticsearch:/usr/share/elasticsearch/config xxxxxx
ocker run --rm -v source_volume:/data -v $(pwd):/backup ubuntu tar czvf /backup/backup.tar.gz /data
docker run --rm -v /path/to/kafka-backups:/backups --volumes-from kafka busybox \
cp -a /bitnami/kafka /backups/latest
docker run --rm -v /path/to/kafka-backups:/backups --volumes-from `docker-compose ps -q kafka` busybox \
cp -a /bitnami/kafka /backups/latest
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
如果只是改动代码和配置文件等,docker-compose restart是没有问题的;
如果改动了docker-compose.yml里的内容,则必须down之后再up (restart是无法自动加载新变动的内容)
docker image inspect redis:latest|grep -i version
docker save xxxx -o xxx.tar
docker load -i xxx.tar
kubectl delete pods --all
wsl -s Debian wsl --shutdown
wsl --export docker-desktop-data D:\docker\docker-desktop-data.tar
wsl --unregister docker-desktop-data
wsl --import docker-desktop-data D:\docker\ D:\docker\docker-desktop-data.tar --version 2
wsl --export Debian D:\docker\debian\debian.tar wsl --unregister Debian
wsl --import Debian D:\docker\debian\ D:\docker\debian\debian.tar --version 2
wsl --export Ubuntu D:\docker\ubuntu\ubuntu.tar
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
wsl --unregister Ubuntu wsl --import Ubuntu D:\docker\ubuntu\ D:\docker\ubuntu\ubuntu.tar --version 2
curl -L "https://github.com/docker/compose/releases/download/2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
{
"builder": {
"gc": {
"defaultKeepStorage": "10GB",
"enabled": true
}
},
"debug": false,
"experimental": true,
"features": {
"buildkit": true
},
"live-restore": false,
"log-driver": "json-file",
"log-opts": {
"max-file": "1",
"max-size": "10m"
},
"storage-driver": "overlay2",
"exec-opts": [
"native.cgroupdriver=systemd",
"overlay2.override_kernel_check=true",
"overlay2.size=10G"
],
"raw-logs": false,
"registry-mirrors": [
"https://pb8evzri.mirror.aliyuncs.com"
],
"dns": [
"223.5.5.5",
"223.6.6.6"
]
}
[wsl2]
memory=4GB
processors=2
localhostForwarding=true
pageReporting=false
debugConsole=false
nestedVirtualization=false
hardwarePerformanceCounters=false
guiApplications=false
swap=0
kernelCommandLine = vsyscall=emulate
docker login ccr.ccs.tencentyun.com --username=100008523020
docker pull ccr.ccs.tencentyun.com/custom-namespace/custom:[tag]
docker login --username xxxx
sudo docker tag mysql-go xxxx/mysql-go:latest
sudo docker push xxxxx/mysql-go:latest
sudo docker login --username=wxw_****@163.com registry.cn-beijing.aliyuncs.com
docker login --username=wxw_****@163.com registry.cn-beijing.aliyuncs.com
docker tag [ImageId] registry.cn-beijing.aliyuncs.com/wxw-plus/w1106:[镜像版本号]
docker push registry.cn-beijing.aliyuncs.com/wxw-plus/w1106:[镜像版本号]
dockerd-rootless-setuptool.sh install
bcdedit /set hypervisorlaunchtype auto
bcdedit /set hypervisorlaunchtype offpodman
unqualified-search-registries = [ "docker.io" ]
[[registry]]
prefix = "docker.io"
location = "pb8evzri.mirror.aliyuncs.com"
wsl --export podman-machine-default D:\docker\podman-machine-default.tar
wsl --unregister podman-machine-default
wsl --import podman-machine-default D:\docker\ D:\docker\podman-machine-default.tar --version 2
docker compose 共用

pipework
pipework是一个用软件来为linux容器定义网络的工具,
pipework允许你在一个复杂的环境下把容器连接在一起,
pipework使用cgroup和namespace来和LXC容器协同工作,当然也可以和docker来一起工作,
pipework的shell脚本来帮助你自动打通容器之间的网络连接,
pipework br0 rp-meeting 192.168.1.36/24@192.168.1.1漏洞扫描
trivyHarbor 企业级 registry
自签名证书
openssl genrsa -out /data/cert/harbor-ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key /data/cert/harbor-ca.key \
-out /data/cert/harbor-ca.crt
!!!上传镜像,需要先新建项目
./install.sh --with-notary --with-trivy持久化存储
mysql、mogodb 等需要数据卷,使用 volumes
k8s
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
kubeadm reset
kubeadm init --image-repository registry.aliyuncs.com/google_containers --ignore-preflight-errors=all --v=5 --kubernetes-version v1.27.4
kubeadm init \
--apiserver-advertise-address=192.168.31.133 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16
kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
kubeadm join 192.168.0.18:6443 --token j7t0sp.sl0n86pf01fx31sp \
--discovery-token-ca-cert-hash sha256:0d82d2abd67dfd9e7a7afb8db3b4fd5216d113f35a0a5f0324014f88fcb8d10c
kubectl get svc app-front -o go-template --template '{{ .spec.clusterIP }}' -n app
kubeadm config image list
kubectl version -o json
kubectl proxy --port=8888 --address='0.0.0.0' --accept-hosts='^.*' >/dev/null 2>&1&
#1.自动装箱
基于容器对应用运行环境的资源配置要求自动部署应用容器
#2.自我修复(自愈能力)
当容器失败时,会对容器进行重启
当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度
当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
#3.水平扩展
通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁
#4.服务发现
用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和负载均衡
#5.滚动更新
可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
#6.版本回退
可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
#7.密钥和配置管理
在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。
#8.存储编排
自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要
存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
#9.批处理
提供一次性任务,定时任务;满足批量数据处理和分析的场景
Kubernetes 主要由以下几个核心组件组成:
1. etcd 保存了整个集群的状态
2. apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制
3. controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
4. scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上
5. kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理
6. Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI)
7. kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡
除了核心组件,还有一些推荐的组件:
1.kube-dns 负责为整个集群提供 DNS 服务
2.Ingress Controller 为服务提供外网入口
3.Heapster 提供资源监控
4.Dashboard 提供 GUI 5. Federation 提供跨可用区的集群
6.Fluentd-elasticsearch 提供集群日志采集、存储与查询
Pod:最小部署单元,封装一个或多个容器(以及存储、网络等资源)。
Service:定义一组Pod的访问策略,为它们提供一个统一的入口。
Deployment:管理Pod的部署,包括滚动升级和回滚。
StatefulSet:管理有状态的Pod,保证Pod的顺序和唯一性。
DaemonSet:确保所有节点(或一些特定节点)运行一个Pod的副本。
Job:运行一次性任务直到完成。
CronJob:按计划运行Job(如定时备份)。
ConfigMap:在Pod中使用配置文件
https://github.com/kubernetes-sigs/metrics-server/releases
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.2/components.yaml
https://github.com/AliyunContainerService/k8s-for-docker-desktop
kubectl proxy
$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
kubectl config set-credentials docker-desktop --token="${TOKEN}"
echo $TOKEN
k8s 的控制类型
deployment:适合无状态的服务部署
StatefullSet:适合有状态的服务部署
DaemonSet:一次部署,所有的 node 节点都会部署,例如一些典型的应用场景:
运行集群存储 daemon,例如在每个 Node 上运行 glusterd、ceph
在每个 Node 上运行日志收集 daemon,例如 fluentd、 logstash
在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter
Job:一次性的执行任务
Cronjob:周期性的执行任务
k8s kind 类型
Pod 最小的单位
Deployment 弹性扩容,负载均衡
命令
kubectl create -f xxx.yml
kubectl apply -f xxx.yml
kubectl delete -f xxx.yml
kubectl get pods xxx -o wide
kubectl describe pod xxx
kubectl exec -it xxx sh
kubectl delete service xxxxx
kubectl get svc xxxxx -o wide
kubectl get events
kubectl logs -f --tail 20 xxxx
kubectl top pod
k8s 端口范围 30000-32767
k8s 访问 java 的地址: Service 名称.命令空间.Pod 容器端口
kubectl -n kubernetes-dashboard create token kubernetes-dashboard
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab
kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16
kubectl proxy --port=8888 --address='0.0.0.0' --accept-hosts='^.*' >/dev/null 2>&1&
http://172.25.12.166:8888/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/workloads?namespace=default
minikube start --image-mirror-country='cn' --driver=vmware
minikube start --driver=docker --image-mirror-country='cn' -memory=2048 --cpus=2 --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'
minikube start --driver=vmware --image-mirror-country=cn --kubernetes-version=1.23.9 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --registry-mirror=https://registry.docker-cn.com
minikube start --container-runtime=docker --image-mirror-country='cn'
curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.5.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
sudo snap install microk8s --classic --channel=1.12/stable
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server --cluster-init --disable traefik
kubectl create secret docker-registry ali-registry-key --docker-server=registry.cn-beijing.aliyuncs.com --docker-username=wxw_0506@163.com --docker-password=wang0506 --docker-email=475796288@qq.com
kubectl apply -f recommended.yaml -f dashboard.admin-user.yml -f dashboard.admin-user-role.yml
kubectl proxy --address='0.0.0.0' --accept-hosts='^.*' --disable-filter=true >/dev/null 2>&1&
kubectl -n kubernetes-dashboard create token admin-user
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
https://172.28.95.80:30001/#/login
kubectl get pods --all-namespaces
kubectl get pods,svc,ingress,node,ingress,ingressRoute,hpa --all-namespaces -o wide
kubectl get svc xxx-n xxx -o go-template='https://{{.spec.clusterIP}}{{range.spec.ports}}{{if eq .name "https"}}':'{{.port}}{{"\n"}}{{end}}{{end}}'
kubectl describe pods -l name=app-front -n app
kubectl describe pod app-back -n app
kubectl logs --tail="10" -f deployment/app-back --all-containers=true -n app
/usr/local/bin/k3s-uninstall.sh
kubectl get pods,svc,ingress,nodes --all-namespaces
mkdir /opt/ingress-nodeport/https
cd /opt/ingress-nodeport/https
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"
kubectl create secret tls tls-secret --key tls.key --cert tls.crt
kubectl get secret
kubectl describe secret tls-secret
节点和Pod亲和力,是将Pod吸引到一组节点【根据拓扑域】(作为优选或硬性要求)。污点(Taints)则相反,它们允许一个节点排斥一组Pod。
容忍(Tolerations)应用于pod,允许(但不强制要求)pod调度到具有匹配污点的节点上。
污点(Taints)和容忍(Tolerations)共同作用,确保pods不会被调度到不适当的节点。一个或多个污点应用于节点;
这标志着该节点不应该接受任何不容忍污点的Pod。
说明:我们在平常使用中发现pod不会调度到k8s的master节点,就是因为master节点存在污点。
污点的目的是为了确保特定类型的Pod不会被误调度到某些特定的节点
kubectl -n kube-system port-forward $(kubectl -n kube-system get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000 --address 0.0.0.0 >/dev/null 2>&1&
http://xxxx:9000/dashboard/#/
buildx
RUN 命令支持一个选项 --mount=type=cache,可以挂载一个临时目录来为编译器和包管理器缓存目录。
RUN --mount=type=cache,target=~/.m2,id=mvn_cache,sharing=locked
multipass
multipass info –all
multipass set local.driver=virtualbox|hyperv
multipass delete --all --purge
multipass set local.privileged-mounts=true
multipass set local.bridged-network=xxx
multipass find
multipass networks
MULTIPASS_STORAGE
multipass launch docker -n docker -m 4G -d 40G -c 4 --network bridged --cloud-init config.yaml -vvvv
multipass launch lts -n master -m 4G -d 20G -c 4 --cloud-init ./config.yaml -vvvv
multipass start docker
multipass shell docker
multipass delete docker --purge
multipass delete --all
multipass purge
sudo sed -i "s@PasswordAuthentication no@PasswordAuthentication yes@g" /etc/ssh/sshd_config
sudo sed -i "s@#PermitRootLogin prohibit-password@PermitRootLogin no@g" /etc/ssh/sshd_config
sudo sed -i "s@# StrictHostKeyChecking ask@StrictHostKeyChecking no@g" /etc/ssh/ssh_config
sudo sed -i "s@#ClientAliveInterval 0@ClientAliveInterval 60@g" /etc/ssh/sshd_config
sudo sed -i "s@#ClientAliveCountMax 3@ClientAliveCountMax 3@g" /etc/ssh/sshd_config
sudo sed -i "s@#TCPKeepAlive yes@TCPKeepAlive yes@g" /etc/ssh/sshd_config
sudo sed -i "s@archive.ubuntu.com@mirrors.aliyun.com@g" /etc/apt/sources.list
sudo systemctl restart ssh
sudo passwd ubuntu
scp -rC -vvvv ./* ./.* ubuntu@xxxxx:~/dockerdocker k8s lab
https://labs.play-with-docker.com/
https://labs.play-with-k8s.com/
Ctrl/Command+ Insert copy
Shift + Insert paste
