前提
在 kubernates
集群里已经安装好了 istio
注意:命令都是在k8s 集群的master
机器上执行的哦
1. 创建命名空间
namespace
可以用来隔离容器和服务
创建一个dev
,并且打开自动注入
kubectl create ns dev
kubectl label namespace dev istio-injection=enabled
kubectl get ns -L istio-injection
2. 创建secret
因为我们的镜像是私有仓库,必须登陆才能pull
所以在集群内创建secret
,方便pull
镜像
(敏感信息已脱敏)
kubectl -n dev create secret docker-registry geek-secret \
--docker-server=registry.cn-shenzhen.aliyuncs.com \
--docker-username=xxxx\
--docker-password=xxxxx \
--docker-email=xxx@xxx.com
其中,docker-registry
是secret
类型,不能修改
geek-secret
是name,随意修改
页面查看
检验
[root@iZwz983wql3f1yerh738xeZ fanggeek]# kubectl get secrets -n dev
NAME TYPE DATA AGE
default-token-cg9tc kubernetes.io/service-account-token 3 52m
geek-secret kubernetes.io/dockerconfigjson 1 1m
istio.default istio.io/key-and-cert 3 52m
my-secret kubernetes.io/dockerconfigjson 1 14m
3. 创建并部署
kubectl -n dev create -f ./sms-dev.yaml
输出
[root@iZwz983wql3f1yerh738xeZ fanggeek]# kubectl -n dev create -f ./sms-dev-injected.yaml
service "ms-sms" created
deployment.extensions "ms-sms-v1" created
解释
-n dev
安装到dev
这个namespace
4. check
检查、确认一下,执行两个命令,分别查看pod
和service
[root@iZwz9d2n2uc00beimb4u5kZ fanggeek]# kubectl get pod -n prod
NAME READY STATUS RESTARTS AGE
ms-sms-v1-768fd445b-2n94p 2/2 Running 0 3m
ms-sms-v1-768fd445b-6bfxr 2/2 Running 0 3m
注意:数量必须是2
,才表明istio
的proxy
注入进去了
5. 卸载
kubectl -n dev delete -f ./sms-dev.yaml
[root@iZwz983wql3f1yerh738xeZ fanggeek]# kubectl -n dev delete -f ./sms-dev-injected.yaml
service "ms-sms" deleted
deployment.extensions "ms-sms-v1" deleted
6. nothing
在这里贴一下我用的 sms-dev.yaml
##################################################################################################
# sms-dev service
##################################################################################################
apiVersion: v1
kind: Service # 定义一个服务
metadata:
namespace: dev
name: ms-sms
labels:
app: ms-sms
spec:
ports:
- port: 8080 # port是service对外的端口,targetPort是容器的端口,如果不写 targetPort, 那么就默认和port 一样
name: http
selector:
app: ms-sms # 这个service 把所有的 labels 为“app: ms-sms” 的pod选中,抽象为一个service,统一对-外提供服务
---
apiVersion: extensions/v1beta1
kind: Deployment # 定义部署,多个 Deployment 可以组成一个 service
metadata:
namespace: dev
name: ms-sms-v1
spec:
replicas: 1 #副本数量
template:
metadata:
labels:
app: ms-sms #定义一个标签,可以被service 使用
version: v1
spec:
imagePullSecrets:
- name: geek-secret #pull 私有镜像的时候,使用的密钥文件
containers:
- name: ms-sms
image: xxxxxxxxxx/sms-dev:latest
imagePullPolicy: Always # Always:不管镜像是否存在都会进行一次拉取,适合我们标记为 latest的私有镜像
ports:
- containerPort: 8080
---