//创建处理器函数 func handler(w http.ResponseWriter,r*http.Request) { //这里面的参数是不能变的
, user2.Msg) } } }() wg.Wait() } 三、Mysql 对数据库的操作: 开始之前的基操 create database goWeb ; use goWeb; create table people( id int primary key auto_increment, name varchar(20), address 感觉好难受 */ func main() { // 1、打开链接 db, err := sql.Open("mysql", "root:1234@tcp(localhost:3306)/goweb 可是好像了解了解底层呐 */ func main() { // 连接 db, err := sql.Open("mysql", "root:1234@tcp(localhost:3306)/goWeb &address) fmt.Println(id, " ", name, " ", address) } defer rows.Close() // 关闭结果集 } 四、goWeb
{{}}来包含需要在渲染时被替换的字段,{{.}}表示当前的对象 如果要访问当前对象的字段通过{{.FieldName}},但是需要注意一点:这个字段必须是导出的(字段首字母必须是大写的),否则在渲染的时候就会报错
关于goweb,你不得不知道的知识 若是初学者可以借鉴GoWeb查阅本文。 HTTP状态码: 意义 每个状态码都是,http设计者对“网络通讯”中可能出现的情况的假设、预判。 github.com/jmoiron/sqlx" ) // 核心的两步: DB,err := sqlx.Open("mysql","root:1234@tcp(localhost:3306)/goweb POST是提交资源 参数:GET是参数在URL,POST在请求体 幂等性:GET多次执行结果不变(幂等),POST可能多次提交(非幂等、多次下单) 缓存:GET易被缓存、POST一般不缓存 借鉴博客: 1、GoWeb
安装docker # 安装一些必要的系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加软件源信息 # docker 官方源 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 阿里云源 sudo yum-config-manager --add-repo http://mirr
4、建立Go的工作空间(workspace,也就是GOPATH环境变量指向的目录)
安装docker后,在任务栏图标右键–>switch to windos container 切换到容器
----> kubectl create configmap goweb --from-literal=port=9091 执行命令后将会创建一个名为 goweb 的 ConfigMap,其中包含一个名为 ----> apiVersion: v1 kind: Pod metadata: name: goweb spec: containers: - name: goweb image: /v1 kind: Deployment metadata: labels: app: goweb name: goweb spec: replicas: 3 selector: matchLabels: app: goweb template: metadata: labels: app: goweb spec : containers: - name: goweb image: 192.168.11.254:8081/webdemo/goweb:20230515v2
metadata: labels: app: goweb-demo spec: containers: - name: goweb-demo metadata: labels: app: goweb-demo spec: containers: - name: goweb-demo 验证效果# 进入容器删除静态文件,模拟故障kubectl exec -it goweb-demo-586ff85ddb-4646k -c goweb-demo -n test-a -- bashrm - 验证效果# 进入容器后,杀掉goweb-demo的进程kubectl exec -it goweb-demo-5d7d55f846-vm2kc -c goweb-demo -n test-a -- bashroot Ss 07:23 0:00 /bin/sh -c /opt/goweb-demo/runserverroot@goweb-demo-5d7d55f846-vm2kc:/opt/goweb-demo
: metadata: labels: app: goweb-demo spec: containers: - name: goweb-demo : 8090 selector: app: goweb-demo type: NodePort tantianran@test-b-k8s-master:~/goweb-demo$ kubectl matchLabels: app: goweb-demo template: metadata: labels: app: goweb-demo 0 109s goweb-demo-68cf558b74-f7g6t 0/1 Pending 0 109s goweb-demo-68cf558b74 109s goweb-demo-68cf558b74-pgrvb 0/1 Pending 0 109s goweb-demo-68cf558b74-ps5dn 0/
metadata: labels: app: goweb-demo spec: containers: - name: goweb-demo [*].name}# 进入某个pod里的容器kubectl exec -it goweb-demo-686967fd56-556m9 -c goweb-demo -n test-a -- bash# 进入容器后 验证效果# 进入容器删除静态文件,模拟故障kubectl exec -it goweb-demo-586ff85ddb-4646k -c goweb-demo -n test-a -- bashrm - 验证效果# 进入容器后,杀掉goweb-demo的进程kubectl exec -it goweb-demo-5d7d55f846-vm2kc -c goweb-demo -n test-a -- bashroot Ss 07:23 0:00 /bin/sh -c /opt/goweb-demo/runserverroot@goweb-demo-5d7d55f846-vm2kc:/opt/goweb-demo
name: goweb namespace: goweb-namespace spec: replicas: 3 selector: matchLabels: app: goweb template: metadata: labels: app: goweb spec: containers: - name: goweb image: 192.168.11.253/library/goweb:latest ports: - containerPort 我将创建一个Node Affinity规则,优先将goweb应用调度到拥有标签app=goweb-node的节点上。 goweb应用调度到拥有标签app=goweb-node的节点上,但如果没有满足条件的节点,它仍然可以调度到其他节点上。
^C [root@workhost src]# cd goweb/ [root@workhost goweb]# go build main.go 编写Dockerfile 这个 Dockerfile 启动容器 docker run -d -it --name goweb -p 8090:80 192.168.11.254:8081/webdemo/goweb:20230427v1 访问 图片 推送到私有仓库 name: goweb spec: replicas: 1 selector: matchLabels: app: goweb template: metadata /goweb:20230427v1 name: goweb --- apiVersion: v1 kind: Service metadata: labels: app: goweb : name: goweb spec: ingressClassName: nginx rules: - host: "test.goweb.com" http: paths
metadata: labels: app: goweb-demo spec: containers: - name: goweb-demo image: 192.168.11.247/web-demo/goweb-demo:20221229v3---apiVersion: v1kind: Servicemetadata: name: goweb-demo : matchLabels: app: goweb-demo template: metadata: labels: app: goweb-demo goweb-demo=192.168.11.247/web-demo/goweb-demo:20221229v3 --namespace=test-a --record=trueControlled set image deployment goweb-demo goweb-demo=192.168.11.247/web-demo/goweb-demo:20221229v3 --namespace
在本次实战中,我们将以goweb应用为例,将Pod调度到具有app=goweb-node标签的节点上。 2步骤 2:编写goweb应用的Deployment文件 我们假设有一个goweb应用,用于测试目的。 apps/v1 kind: Deployment metadata: labels: app: goweb name: goweb namespace: goweb-namespace app=goweb-node标签的节点上。 labels: app: goweb name: goweb namespace: goweb-namespace spec: replicas: 3 selector:
应用 我们将使用goweb这个测试应用来演示资源限制的实战。 goweb是一个用Golang语言开发的简单Web应用,你也可以使用自己的应用进行测试。首先,我们需要将goweb应用部署到K8S集群中。 deployment goweb --image=192.168.11.254:8081/webdemo/goweb:1.0 --namespace=goweb-demo 创建一个Service来公开 goweb应用的访问入口: kubectl expose deployment goweb --port=80 --target-port=8080 --namespace=goweb-demo Part4 观察Pod的行为: kubectl top pod --namespace=goweb-demo 运行上述命令,你将看到goweb应用在资源限制下的CPU和内存使用情况。
goweb项目结构 [root@workhost goweb]# tree . ├── Dockerfile ├── go.mod ├── main.go ├── README.md └── static name: goweb spec: replicas: 6 selector: matchLabels: app: goweb template: metadata : 80 --- apiVersion: v1 kind: Service metadata: labels: app: goweb name: goweb spec: ports: pod/goweb-d59b979bb-nd8dl 1/1 Running 0 56s pod/goweb-d59b979bb-prl7m 1/1 Running 0 55s pod/goweb-d59b979bb-r5csh 1/1 Running 0 58s pod/goweb-d59b979bb-t2v5n
节点亲和性案例(nodeAffinity) pod.yaml apiVersion: v1 kind: Pod metadata: name: goweb-demo spec: affinity image: 192.168.11.247/web-demo/goweb-demo:20221229v3 # 创建 tantianran@test-b-k8s-master:~/goweb-demo $ kubectl create -f pod.yaml pod/goweb-demo created # 查看 tantianran@test-b-k8s-master:~/goweb-demo$ containers: - name: goweb-demo image: 192.168.11.247/web-demo/goweb-demo:20221229v3 unlabeled tantianran@test-b-k8s-master:~/goweb-demo$ 提示:key和小横杠之间不能有空格,否则删除失败。
创建用于测试的Deployment和Service apiVersion: apps/v1 kind: Deployment metadata: labels: app: test-goweb name: test-goweb spec: replicas: 6 selector: matchLabels: app: test-goweb template /web-demo/goweb-demo:20221229v3 imagePullPolicy: IfNotPresent name: goweb-demo name: test-goweb spec: ports: - name: 80-8090 nodePort: 30010 port: 80 protocol: TCP 具体来说,这个规则将来自Kubernetes服务“default/test-goweb”的流量伪装为外部目标,以便它们可以通过集群外部访问。
例如,可以通过以下方式创建一个Service,它将选择所有标有app=goweb-demo的Pod作为它的后端: goweb-demo-v1.yaml apiVersion: v1 kind: Service : app: goweb-demo 在这个例子中,Service使用selector字段来选择具有app=goweb-demo标签的Pod作为它的后端。 name: goweb-demo spec: replicas: 3 selector: matchLabels: app: goweb-demo strategy :8090 --node-port=30080 其中,goweb是Service对象的名称,默认也是用此名称与deployment中定义的label "app: goweb" 保持一致,--tcp=80 “goweb”的服务,它将流量路由到标签为“app=goweb”的Pod上。