k8s创建资源会自动调用后端node,部署是使用镜像进行部署
1,创建
1 2 | #指定名称为nginx 副本数为3 使用镜像为nginx:1.14 端口是80kubectl run nginx --replicas=3 --image=nginx:1.14 --port=80 |
查看创建的pod,正在创建3个副本容器
1 2 3 4 5 | # kubectl get podNAME READY STATUS RESTARTS AGEnginx-7bc87ddb4d-47lrr 0/1 ContainerCreating 0 55snginx-7bc87ddb4d-4q9nr 0/1 ContainerCreating 0 55snginx-7bc87ddb4d-sz8hl 0/1 ContainerCreating 0 55s |
创建成功后状态为running
1 2 3 4 5 | # kubectl get podNAME READY STATUS RESTARTS AGEnginx-7bc87ddb4d-47lrr 1/1 Running 0 6mnginx-7bc87ddb4d-4q9nr 1/1 Running 0 6mnginx-7bc87ddb4d-sz8hl 1/1 Running 0 6m |
实际创建了一个包含三个副本的deployment
1 2 3 | # kubectl get deployNAME READY UP-TO-DATE AVAILABLE AGEnginx 3/3 3 3 6m49s |
2,发布
创建好的应用需要创建service暴露应用
1 2 3 4 5 6 7 | #创建一个service#deployment nginx 该service对应的deployment名称是nginx#--port=80 k8s中服务之间访问的端口#--type=NodePort发布类型是NodePort即外部可以访问的端口,会随机生成一个3000以上的端口#--target-port容器的端口(最根本的端口人口),与制作容器时暴露的端口一致,例如docker.io官方的nginx暴露是80端口#--name指定service的的名称kubectl expose deployment nginx --port=80 --type=NodePort --target-port=80 --name=nginx-service |
查看,对外暴露了端口为30232
1 2 3 4 | # kubectl get serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.10.10.1 <none> 443/TCP 3d4hnginx-service NodePort 10.10.10.48 <none> 80:30232/TCP 9m8s |
访问 任意node的ip加对应的端口

查看nginx日志
1 | kubectl logs nginx-7bc87ddb4d-sz8hl |
如果查看日志出现错误提示
1 | Error from server (Forbidden): Forbidden (user=system:anonymous, verb=get, resource=nodes, subresource=proxy) ( pods/log nginx-7bc87ddb4d-sz8hl) |
解决办法
绑定一个cluster-admin的权限
1 | kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous |
3,更新项目
项目已经部署需要更新
1 | kubectl set image deployment/nginx nginx=nginx:1.15 |
会下载镜像滚动更新
更新完毕查看nginx版本变成1.15了
1 | kubectl describe pod nginx-6f7d58d4cc-9bj74 |

4,回滚
查看发布过的版本
1 2 3 4 5 | # kubectl rollout history deployment/nginxdeployment.extensions/nginxREVISION CHANGE-CAUSE1 <none>2 <none> |
回滚到上一个版本
1 | kubectl rollout undo deployment/nginx |
指定版本回滚

5,删除
项目下线删除
1 2 3 4 | #删除deploymentkubectl delete deployment/nginx#删除servicekubectl delete svc/nginx-service |
一般管理k8s集群在master进行管理,把管理工具kubectl拷贝至其他主机无法管理集群,本地没有监听的端口8080
1 2 | # kubectl get nodeThe connection to the server localhost:8080 was refused - did you specify the right host or port? |
生产admin证书
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # cat admin-csr.json{ "CN": "admin", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "BeiJing", "L": "BeiJing", "O": "system:masters", "OU": "System" } ]}cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin |

在k8s证书目录下执行生成配置文件,这里连接的IP使用的是VIP 192.168.1.60
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | kubectl config set-cluster kubernetes \> --server=https://192.168.1.60:6443 \> --embed-certs=true \> --certificate-authority=ca.pem \> --kubeconfig=configCluster "kubernetes" set.# kubectl config set-credentials cluster-admin \> --certificate-authority=ca.pem \> --embed-certs=true \> --client-key=admin-key.pem \> --client-certificate=admin.pem \> --kubeconfig=configUser "cluster-admin" set.kubectl config set-context default --cluster=kubernetes --user=cluster-admin --kubeconfig=configContext "default" created.kubectl config use-context default --kubeconfig=configSwitched to context "default". |
生成config配置文件

把该配置文件config拷贝至其他主机例如node即可以加配置文件运行kubectl命令
1 2 3 4 | # kubectl --kubeconfig=config get nodeNAME STATUS ROLES AGE VERSION192.168.1.65 Ready <none> 3d22h v1.13.4192.168.1.66 Ready <none> 3d22h v1.13.4 |
把配置文件放在以下目录即可以不加配置文件即可使用
1 | /root/.kube |