Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add example #16

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions kubernetes/zhigang_example/backend.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# fastapi-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-deployment
spec:
replicas: 1
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
containers:
- name: backend-container
image: zglian/backend:latest
imagePullPolicy: Always
ports:
- containerPort: 8000
# - containerPort: 3000
---
# backend-service.yaml
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
type: NodePort
# type: ClusterIP
selector:
app: backend
ports:
- protocol: TCP
# port: 3000
# targetPort: 3000
port: 8000
targetPort: 8000
nodePort: 32601
99 changes: 99 additions & 0 deletions kubernetes/zhigang_example/docker-publish.yml
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@zglian 這是你 github action 嗎 要放 .github/workflows/

Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Docker

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

on:
#schedule:
# - cron: '29 15 * * *'
push:
branches: [ "master" ]
# Publish semver tags as releases.
# tags: [ 'v*.*.*' ]
#pull_request:
# branches: [ "master" ]

env:
# Use docker.io for Docker Hub if empty
REGISTRY: ghcr.io
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}


jobs:
build:

runs-on: ubuntu-latest
permissions:
contents: read
packages: write
# This is used to complete the identity challenge
# with sigstore/fulcio when running outside of PRs.
id-token: write

steps:
- name: Checkout repository
uses: actions/checkout@v3

# Install the cosign tool except on PR
# https://github.com/sigstore/cosign-installer
- name: Install cosign
if: github.event_name != 'pull_request'
uses: sigstore/cosign-installer@6e04d228eb30da1757ee4e1dd75a0ec73a653e06 #v3.1.1
with:
cosign-release: 'v2.1.1'

# Set up BuildKit Docker container builder to be able to build
# multi-platform images and export cache
# https://github.com/docker/setup-buildx-action
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0

# Login against a Docker registry except on PR
# https://github.com/docker/login-action
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

# Extract metadata (tags, labels) for Docker
# https://github.com/docker/metadata-action
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

# Build and push Docker image with Buildx (don't push on PR)
# https://github.com/docker/build-push-action
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # v5.0.0
with:
context: "{{defaultContext}}:docker_images"
file: centos7.Dockerfile
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max

# Sign the resulting Docker image digest except on PRs.
# This will only write to the public Rekor transparency log when the Docker
# repository is public to avoid leaking data. If you would like to publish
# transparency data even for private images, pass --force to cosign below.
# https://github.com/sigstore/cosign
- name: Sign the published Docker image
if: ${{ github.event_name != 'pull_request' }}
env:
# https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable
TAGS: ${{ steps.meta.outputs.tags }}
DIGEST: ${{ steps.build-and-push.outputs.digest }}
# This step uses the identity token to provision an ephemeral certificate
# against the sigstore community Fulcio instance.
run: echo "${TAGS}" | xargs -I {} cosign sign --yes {}@${DIGEST}
35 changes: 35 additions & 0 deletions kubernetes/zhigang_example/frontend.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
apiVersion: v1
kind: Service
metadata:
name: zhigang-app-service
spec:
selector:
app: zhigang-node-web-app
ports:
- protocol: "TCP"
port: 8080
targetPort: 3000
nodePort: 32700
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: zhigang-node-web-app
spec:
selector:
matchLabels:
app: zhigang-node-web-app
replicas: 1
template:
metadata:
labels:
app: zhigang-node-web-app
spec:
containers:
- name: node-web-app-zhigang
image: zglian/node-web-app
imagePullPolicy: Always
ports:
- containerPort: 3000

Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# helm

```bash
#add helm repository
$helm repo add bitnami https://charts.bitnami.com/bitnami
$helm repo update

#Create and Apply Persistent Storage Volume
#避免pod被刪掉之後資料消失
$kubectl apply -f postgres-pv.yaml

#Create and Apply Persistent Volume Claim
#連接到PV
$kubectl apply -f postgres-pvc.yaml

#install helm chart
helm install [release-name] [repo-name] --set persistence.existingClaim=[pvc-name] --set volumePermissions.enabled=true

#查看預設密碼
$kubectl get secret --namespace default psql-test-postgresql -o jsonpath="{.data.postgresql-password}" | base64 --decode

#port foward to localhost
#在一個terminal執行
$kubectl port-forward --namespace default svc/psql-test-postgresql 5432:5432

#在另一個terminal執行登入到psql
$psql --host 127.0.0.1 -U postgres -d postgres -p 5432

#I also run pgadmin on localhost to look up db, and use alembic to initialize it.

```
13 changes: 13 additions & 0 deletions kubernetes/zhigang_example/initialize_db_alembic.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from sqlalchemy import Column, Integer, String, Date, UnicodeText, DateTime
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
__tablename__ = 'user'

UserName = Column(String, primary_key = True)
password = Column(String, nullable = False)
birthday = Column(Date)
last_login = Column(DateTime)
create_time = Column(DateTime)
14 changes: 14 additions & 0 deletions kubernetes/zhigang_example/postgres-pv.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: zhi-postgresql-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
11 changes: 11 additions & 0 deletions kubernetes/zhigang_example/postgres-pvc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: zhi-postgresql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Loading