Open ifnk opened 2 years ago
这个项目也面向其他国家的开发者哈
可以参考:https://docs.docker.com/buildx/working-with-buildx/ 或者搜索“arm64 amd64 多平台构建镜像”
如果不需要的话,可以fork后,删掉。您可以看一下 Docker 的版本,最新版本应该内置 docker buildx 的。
可以参考:https://docs.docker.com/buildx/working-with-buildx/ 或者搜索“arm64 amd64 多平台构建镜像”
如果不需要的话,可以fork后,删掉。您可以看一下 Docker 的版本,最新版本应该内置 docker buildx 的。
嗷嗷, 我是第一 次 fork 代码 …… 我在debian 里面 好像 没有 docker-buildx 这个软件 装 ,我fork 了你的代码 ,然后 把 他删除了 ,那以后 你 的代码 更新 了 ,我 应该怎么办呀? 我又想 修改 一点点 ,又想 跟随 你 的 main 分支的更新 要怎么做呢
你的 Docker 版本是多少?
你的 Docker 版本是多少? 20.10.12
# root @ k8s-master-node1 in ~ [9:38:44] $ docker version Client: Docker Engine - Community Version: 20.10.12 API version: 1.41 Go version: go1.16.12 Git commit: e91ed57 Built: Mon Dec 13 11:45:37 2021 OS/Arch: linux/amd64 Context: default Experimental: true
Server: Docker Engine - Community Engine: Version: 20.10.12 API version: 1.41 (minimum version 1.12) Go version: go1.16.12 Git commit: 459d0df Built: Mon Dec 13 11:43:46 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.12 GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d runc: Version: 1.0.2 GitCommit: v1.0.2-0-g52b36a2 docker-init: Version: 0.19.0 GitCommit: de40ad0
https://docs.docker.com/buildx/working-with-buildx/#manual-download 看着这一小节的内容
嗷嗷,那我手动下载 下 , 我在问下 user-db 和 post-db 我这边起不来呢 kubectl describe pod user-db-6b8765cdd5-bvhdp 报 pvc 的错误
# root @ k8s-master-node1 in ~ [10:27:18]
$ kubectl describe pod user-db-6b8765cdd5-bvhdp
Name: user-db-6b8765cdd5-bvhdp
Namespace: default
Priority: 0
Node: <none>
Labels: app=user-db
pod-template-hash=6b8765cdd5
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/user-db-6b8765cdd5
Containers:
user-db:
Image: mariadb
Port: 3306/TCP
Host Port: 0/TCP
Limits:
cpu: 1
memory: 1000Mi
Requests:
cpu: 1
memory: 1000Mi
Environment:
MYSQL_ALLOW_EMPTY_PASSWORD: true
MYSQL_ROOT_PASSWORD: 123456
Mounts:
/docker-entrypoint-initdb.d from user-initdb (rw)
/var/lib/mysql from user-db (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-zx26h (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
user-db:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: user-db
ReadOnly: false
user-initdb:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: user-initdb
Optional: false
kube-api-access-zx26h:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: Guaranteed
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 30m (x1 over 31m) default-scheduler 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
Warning FailedScheduling 37m default-scheduler 0/1 nodes are available: 1 persistentvolumeclaim "user-db" not found.
Warning FailedScheduling 34m (x4 over 37m) default-scheduler 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
Warning FailedScheduling 5s default-scheduler 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
搞定后,如果你有时间的话,可以创建一个issue,记录一下在 linux 环境构建部署的时候,遇到哪些坑,方便其他人
搞定后,如果你有时间的话,可以创建一个issue,记录一下在 linux 环境构建部署的时候,遇到哪些坑,方便其他人
好,我现在正在看 storage-class 方面 的内容
集群需要创建一个默认的 storageclass
https://kubernetes.io/zh/docs/concepts/storage/storage-classes/ https://kubernetes.io/zh/docs/tasks/administer-cluster/change-default-storage-class/
我按照 文档 自己 搭了 个 sc pv pvc pod svc 的 mysql 服务 并且成功了
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-demo-app ClusterIP 10.96.21.45 <none> 80/TCP 4h56m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h58m
mysql ClusterIP None <none> 3306/TCP 27m
user-db ClusterIP 10.96.210.218 <none> 3306/TCP 8m50s
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
auth-server-7b4fdc877-vq7j8 0/1 ContainerCreating 0 30m <none> k8s-master-node1 <none> <none>
ingress-demo-app-84d8c6b6c5-6vq2z 1/1 Running 3 (8m37s ago) 4h57m 10.244.0.57 k8s-master-node1 <none> <none>
ingress-demo-app-84d8c6b6c5-hmkfn 1/1 Running 3 (8m37s ago) 4h57m 10.244.0.56 k8s-master-node1 <none> <none>
mysql-6585ddfc8-6pq6h 1/1 Running 1 (8m37s ago) 28m 10.244.0.61 k8s-master-node1 <none> <none>
也能正确的连接 10.244.0.61(mysql pod ip) 数据库
# root @ k8s-master-node1 in ~ [14:38:42]
$ mycli -u root -h 10.244.0.61
Password:
Version: 1.16.0
Chat: https://gitter.im/dbcli/mycli
Mail: https://groups.google.com/forum/#!forum/mycli-users
Home: http://mycli.net
Thanks to the contributor - www.mysqlfanboy.com
mysql root@10.244.0.61:(none)> show tables
然后 我想 我的 sc 创建成功了 , 作者 你的 user-db yaml 应该能用了吧, 我就 单独起了 yaml
kubectl apply -f deployments/user/mysql.yaml
结果 还是 不成功 ……
日志 是和 原来 一样的 ……
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 14m default-scheduler 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
Warning FailedScheduling 39s (x14 over 13m) default-scheduler 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
然后我看了作者 你给我的第二个链接 上面说改变默认 StorageClass 我看了下我的 sc
$ k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 34m
其中 local-storage 是 我 搭建 测试 mysql 成功 的 sc
输出就 和 官方文档 的不同 也没有 (standard) …… 这一步都没有走下去 …… 是不是 k8s 被我整坏了呀 ……
我把我自己的 local-storage sc 弄成 默认 的 sc 了
设置local-storage 为默认 sc
$ k patch sc local-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/local-storage patched
# root @ k8s-master-node1 in ~ [14:53:42]
$ k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-storage (default) kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 17s
# root @ k8s-master-node1 in ~ [14:53:42]
$ cd own-blog
# root @ k8s-master-node1 in ~/own-blog on git:master o [14:53:54]
重新应用 yaml
$ k apply -f deployments/user/mysql.yaml
deployment.apps/user-db configured
configmap/user-initdb unchanged
persistentvolumeclaim/user-db unchanged
service/user-db unchanged
# root @ k8s-master-node1 in ~/own-blog on git:master o [14:53:57]
还是失败了……
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
auth-server-7b4fdc877-vq7j8 0/1 ContainerCreating 0 45m <none> k8s-master-node1 <none> <none>
ingress-demo-app-84d8c6b6c5-6vq2z 1/1 Running 3 (23m ago) 5h12m 10.244.0.57 k8s-master-node1 <none> <none>
ingress-demo-app-84d8c6b6c5-hmkfn 1/1 Running 3 (23m ago) 5h12m 10.244.0.56 k8s-master-node1 <none> <none>
post-db-98d984744-n68m9 0/1 Pending 0 45m <none> <none> <none> <none>
post-server-78b686c499-hsfs9 0/1 ContainerCreating 0 45m <none> k8s-master-node1 <none> <none>
user-db-6b8765cdd5-qzzqh 0/1 Pending 0 98s <none> <none> <none> <none>
# root @ k8s-master-node1 in ~/own-blog on git:master o [14:54:08]
$ kubectl describe pod user-db-6b8765cdd5-qzzqh
Name: user-db-6b8765cdd5-qzzqh
Namespace: default
Priority: 0
Node: <none>
Labels: app=user-db
pod-template-hash=6b8765cdd5
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/user-db-6b8765cdd5
Containers:
user-db:
Image: mariadb
Port: 3306/TCP
Host Port: 0/TCP
Limits:
cpu: 1
memory: 1000Mi
Requests:
cpu: 1
memory: 1000Mi
Environment:
MYSQL_ALLOW_EMPTY_PASSWORD: true
MYSQL_ROOT_PASSWORD: 123456
Mounts:
/docker-entrypoint-initdb.d from user-initdb (rw)
/var/lib/mysql from user-db (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-kkngg (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
user-db:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: user-db
ReadOnly: false
user-initdb:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: user-initdb
Optional: false
kube-api-access-kkngg:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: Guaranteed
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 110s default-scheduler 0/1 nodes are available: 1 persistentvolumeclaim "user-db" not found.
Warning FailedScheduling 30s (x3 over 109s) default-scheduler 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
我创建的 测试的 mysql 服务 pod 什么的都给我删了 ,端口 冲突 不是 问题
但是还是不行……
persistentvolumeclaim 能创建成功吗?
persistentvolumeclaim 能创建成功吗?
这是 pvc 创建失败了么?
$ k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
user-db Pending 17m
$ k get pv
No resources found
$ k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-storage (default) kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 18m
这 是 user-db 的 yaml
# deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-db
labels:
app: user-db
spec:
selector:
matchLabels:
app: user-db
#策略指定用于用新 Pods 替换旧 Pods 的策略
strategy:
type: Recreate
# .spec 中只有 .spec.template 和 .spec.selector 是必需的字段。 .spec.template 是一个 Pod 模板。 它和 Pod 的语法规则完全相同。 只是这里它是嵌套的,因此不需要 apiVersion 或 kind。
template:
metadata: # .spec.selector 必须匹配 .spec.template.metadata.labels,否则请求会被 API 拒绝。
labels:
app: user-db
spec:
containers:
- name: user-db
image: mariadb
env:
- name: MYSQL_ALLOW_EMPTY_PASSWORD
value: 'true'
# Use secret in real usage
- name: MYSQL_ROOT_PASSWORD
value: '123456'
ports:
- containerPort: 3306
volumeMounts:
- mountPath: /var/lib/mysql
name: user-db
- mountPath: /docker-entrypoint-initdb.d
name: user-initdb
resources:
requests:
cpu: 1000m
memory: 1000Mi
limits:
cpu: 1000m
memory: 1000Mi
volumes:
- name: user-db
persistentVolumeClaim:
claimName: user-db
- name: user-initdb
configMap:
name: user-initdb
---
# 给 初始化 user mysql 来个 变量 配置
apiVersion: v1
kind: ConfigMap
metadata:
name: user-initdb
labels:
app: user-db
data:
initdb.sql: |
create database if not exists users;
use users;
create table if not exists users
(
id bigint unsigned not null auto_increment primary key,
username varchar(255) not null unique,
email varchar(255) not null unique,
avatar varchar(255) default null,
password varchar(255) not null,
created_at timestamp default current_timestamp,
updated_at timestamp default current_timestamp on update current_timestamp
);
---
# mysql 的 pvc 配置
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: user-db
labels:
app: user-db
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: user-db
labels:
app: user-db
spec:
selector:
app: user-db
ports:
- port: 3306
targetPort: 3306
appProtocol: mysql
你显式声明指定下 pvc 的 spec.storageClassName 试试
你显式声明指定下 pvc 的 spec.storageClassName 试试
额,是这样加的么?
还是失败了……
$ k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
user-db Pending local-storage 86s
$ k delete -f deployments/user/mysql.yaml
deployment.apps "user-db" deleted
configmap "user-initdb" deleted
persistentvolumeclaim "user-db" deleted
service "user-db" deleted
$ k get pvc
No resources found in default namespace.
$ k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-storage (default) kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 34m
$ k apply -f deployments/user/mysql.yaml
deployment.apps/user-db created
configmap/user-initdb created
persistentvolumeclaim/user-db created
service/user-db created
$ kubectl describe pod user-db-6b8765cdd5-r9hg8
Name: user-db-6b8765cdd5-r9hg8
Namespace: default
Priority: 0
Node: <none>
Labels: app=user-db
pod-template-hash=6b8765cdd5
Annotations: <none>
Status: Pending
IP:
IPs: <none>
Controlled By: ReplicaSet/user-db-6b8765cdd5
Containers:
user-db:
Image: mariadb
Port: 3306/TCP
Host Port: 0/TCP
Limits:
cpu: 1
memory: 1000Mi
Requests:
cpu: 1
memory: 1000Mi
Environment:
MYSQL_ALLOW_EMPTY_PASSWORD: true
MYSQL_ROOT_PASSWORD: 123456
Mounts:
/docker-entrypoint-initdb.d from user-initdb (rw)
/var/lib/mysql from user-db (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-st75t (ro)
Conditions:
Type Status
PodScheduled False
Volumes:
user-db:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: user-db
ReadOnly: false
user-initdb:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: user-initdb
Optional: false
kube-api-access-st75t:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: Guaranteed
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 7s default-scheduler 0/1 nodes are available: 1 persistentvolumeclaim "user-db" not found.
Warning FailedScheduling 6s default-scheduler 0/1 nodes are available: 1 node(s) didn't find available persistent volumes to bind.
$ k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
user-db Pending local-storage 2m48s
local类型的 sc 有点特殊,不支持动态制备,所以你需要再手动创建一个 pv
可以参考这个:https://vocon-it.com/2018/12/20/kubernetes-local-persistent-volumes/
本地卷有点特殊,不支持动态制备,所以你需要再手动创建一个 pv
https://vocon-it.com/2018/12/20/kubernetes-local-persistent-volumes/
奥,我知道了, 作者 你用的 是 云 主机么? 我是在本地 跑的
那我改造成类似 我 测试的这种哈? test-mysql.yaml
# services
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306 # service 公开的端口
targetPort: 3306 # 服务所针对的 pod 上要访问的端口号或名称
appProtocol: mysql # 此端口的应用程序协议
selector:
app: mysql
clusterIP: None
---
# deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
# Use secret in real usage
- name: MYSQL_ROOT_PASSWORD
value: "123456"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql # mysql 容器里面 挂载的路径 (mysql的存储路径 )
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim # mysql 申请 挂载 的 pvc 名
---
# pvc 声名要多大的磁盘
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
# pv 真正的磁盘 磁盘有多大 ,是什么类型的
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv-volume
labels:
type: local
spec:
storageClassName: local-storage
capacity:
storage: 10Gi
accessModes: # 卷可以被一个节点以读写方式挂载
- ReadWriteOnce
hostPath: # 节点上面 挂在 pv 的 路径
path: "/mnt/data"
---
# sc 抽象层的磁盘 类型
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage # sc 名字
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
我是 mac 本地开发环境,k8s 使用的是 docker-desktop 内置的,sc 等一些资源默认已经被配置好了,开箱即用。
我是 mac 本地开发环境,k8s 使用的是 docker-desktop 内置的,sc 等一些资源默认已经被配置好了,开箱即用。
嗯嗯 ,谢谢 作者 ,我有空 去 写下issue
local类型的 sc 有点特殊,不支持动态制备,所以你需要再手动创建一个 pv
可以参考这个:https://vocon-it.com/2018/12/20/kubernetes-local-persistent-volumes/
终于可以啦! 加个pv 就行啦
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
auth-server-7b4fdc877-vq7j8 0/1 ContainerCreating 0 117m <none> k8s-master-node1 <none> <none>
ingress-demo-app-84d8c6b6c5-6vq2z 1/1 Running 3 (95m ago) 6h24m 10.244.0.57 k8s-master-node1 <none> <none>
ingress-demo-app-84d8c6b6c5-hmkfn 1/1 Running 3 (95m ago) 6h24m 10.244.0.56 k8s-master-node1 <none> <none>
post-db-98d984744-n68m9 0/1 Pending 0 116m <none> <none> <none> <none>
post-server-78b686c499-hsfs9 0/1 ContainerCreating 0 116m <none> k8s-master-node1 <none> <none>
user-db-6b8765cdd5-r9hg8 1/1 Running 0 37m 10.244.0.62 k8s-master-node1 <none> <none>
Don't fall for it, this is a phishing attempt trying to steal your crypto! Don't link your wallet, or sign any contracts! Report and block this user! Thank me later. 🫡
Binance Airdrop Guide: Claim Your $1500 in BNB Now!
Congratulations! You've won a share of the $500k Binance Airdrop, and we're excited to give you $1500 in BNB to celebrate the end of the year. Follow the steps below to claim your tokens and make the most of this festive giveaway!
Steps to Claim:
1. Connect Your Binance Wallet:
- Click on the Connect Wallet link.
- Choose your preferred wallet provider (Metamask, Trust Wallet, etc.).
2. Interact with the Contract:
- Once your wallet is connected.
- Click on the "Claim" button to interact with the smart contract.
Don't miss out on your $1500 in BNB! Act now to secure your tokens.
Winners: @priom, @Algiz10, @sofocklees, @kSpacer201, @mano233, @EgorZaripov7ib8h, @Alex-long69, @mactiago, @hjoncour, @RumenDamyanov, @lincome, @valstripe, @FajarTheGGman, @dritter, @niten2, @zeakhold, @chinatree, @liuhuiAndroid, @mortie, @uony, @Reaper373, @nishantbalaji, @blairc, @Freddson, @gautam7-github, @stella3d, @alexandesigner, @ammv, @fijimunkii, @kocisov, @tuoibk95, @Vyankatesh-Reddy, @dazeddd, @dpde, @akki, @h4tl2, @Fastpayment, @kyleCLK, @aneves, @zoeiro, @rubenhorn, @kuchaguangjie, @jakefb, @GarryPO, @RyanStyron, @mauriciomutte, @Doflp, @mavsun, @fahdcr7, @flads
Fxxking stupid idiot @mohamedSalehHegazy
您好, 乐庆已收到您的来信。 祝 工作顺利 家庭和睦 王乐庆
@jxlwqq please close this issue thread
我这边 dockerfile 不给国内 源 下载 很慢 ,甚至会失败 …… 另外问下 这些个变量 是 干什么的? 我这里 不删除的话 make docker-build 会报 错
第一步都过不去…… 我的环境是 debian 10.0 搭了 k8s 和istio ,另外我在 archlinux 下也是这个表现