K8S实战
大约 3 分钟
快速入门
- 无状态服务:
就是没有特殊状态的服务,各个请求对于服务器来说统一无差别处理,请求自身携带了所有服务端所需要的所有参数。
没有要实时保存的数据。 - 有状态服务:
与之相反,有状态服务在服务端保留之前请求的信息,用以处理当前请求。例如:MySQL
常用命令
# 通过get node操作获取集群节点信息。
kubectl get node
# 创建pod ikubernetes/myapp2:v0.7是官方提供的demo镜像
#kubectl run nginx-svc --image=nginx:latest --port=80 # nginx镜像
kubectl run my-app --image=ikubernetes/myapp2:v0.7 --port=80
# 查看Deployment组件
kubectl get deployment
# 查看ReplicaSet组件
kubectl get rs
# 查看POD组件
kubectl get pod
kubectl get pod -o wide
kubectl get pod --all-namespaces
# 删除部门的应用
kubectl delete deployment my-app
# 删除全部应用
kubectl delete deployment --all
kubectl delete rs --all
kubectl delete pod --all
# 扩容
kubectl scale deployment my-app --replicas=3
# 创建service(复制均衡和服务的发现)
kubectl expose deployment my-app --target-port=80 --port=80
# 查看service组件
kubectl get svc
kubectl get svc -o wide
kubectl describe service my-app
# 查看默认是轮询规则
curl 10.100.127.104
# 可查看负载负载均衡执行情况
curl 10.100.127.104/hostname
# 此时外网还访问不到service,需要配置iptabels的转发规则或者ssh的转发
# ssh端口转发(本地执行)
ssh -L 7777:10.111.63.238:80 root@192.16.18.111
# 输入root密码验证,在不登出的情况下。本地访问 http://localhost:7777 即可
# iptables端口转发(存在问题,那位大神可以指点一二)
# 开启允许转发
sysctl -w net.ipv4.ip_forward=1
# 清除iptables nat
iptables -t nat -F
# 查看现用所有iptables规则
iptables -t nat -L -n --line-number
# 添加端口转发规则
# 规则解释:在forward表里添加规则,允许转发向6666端口转发的tcp连接数据
iptables -I FORWARD -p tcp --dport 6666 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 6666 -j DNAT --to-destination 10.111.63.238:80
iptables -t nat -I POSTROUTING -p tcp --dport 80 -j MASQUERADE
service iptables save
service iptables restart
iptables -t nat -A OUTPUT -p tcp --dport 6666 -j DNAT --to-destination 10.111.63.238:80
iptables -t nat -A PREROUTING -p tcp --dport 6666 -j DNAT --to-destination 10.111.63.238:80
iptables -t nat -A POSTROUTING -p tcp -d 10.111.63.238 --dport 80 -j SNAT --to-source 192.16.18.111
# 查看ip的映射规则
ipvsadm -Ln
# 查看apiVersion
kubectl api-versions
指令部署
# 创建doploymnet
kubectl run my-app --image=ikubernetes/myapp2:v0.7 --port=80
# 扩容为3个pod
kubectl scale deployment my-app --replicas=3
# 创建service 默认service.type=ClusterIP(外网不可以直接访问) LoadBalancer外网可以直接访问
kubectl expose deployment my-app --type=LoadBalancer --name=my-app-service
#kubectl expose deployment my-app --target-port=80 --port=80 --name=my-app-service
# 查看service
kubectl get svc
[root@k8s-master-111 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-app-service LoadBalancer 10.105.63.149 <pending> 8080:32622/TCP 53m
curl 192.16.18.111:32622
# 删除
kubectl delete svc my-app-service
kubectl delete deployment my-app
Yaml 部署
my-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx
release: stable
template:
metadata:
labels:
app: my-nginx
release: stable
env: test
spec:
containers:
- name: my-nginx
image: nginx:latest
ports:
- name: http
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-nginx
namespace: default
spec:
type: NodePort
selector:
app: my-nginx
release: stable
ports:
- name: http
port: 80
targetPort: 80
kubectl create -f my-nginx.yaml
配置 ingess 域名访问
my-app-ingess.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-my-app
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: myapp.k8s.com
http:
paths:
- path:
backend:
serviceName: my-app
servicePort: 80
kubectl apply -f my-nginx-ingess.yaml
kubectl get ingress
# 需要修改本地hosts文件
curl http://myapp.k8s.com
配置 k8s 拉取私有仓库镜像
k8s 在默认情况下,只能拉取 harbor 镜像仓库的公有镜像,如果拉取私有仓库镜像,则是会报 ErrImagePull 和 ImagePullBackOff 的错误
docker login 192.168.1.180:8077
## 生成`.docker/config.json`
cat ~/.docker/config.json
## 对秘钥文件进行base64加密
cat /root/.docker/config.json | base64 -w 0
# ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjEuMTgwOjgwNzciOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2U0dGeVltOXlNVEl6TkRVPSIKCQl9Cgl9Cn0=
## 创建docker-secret.yaml
cat > docker-secret.yaml <<EOF
apiVersion: v1
kind: Secret
metadata:
name: docker-login
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjEuMTgwOjgwNzciOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2U0dGeVltOXlNVEl6TkRVPSIKCQl9Cgl9Cn0=
EOF
## 创建应用
kubectl create -f docker-secret.yaml -n default