kn 是 Knative 命令行操作客户端。 通过 kn 可以方便的操作Knative 相关的资源。
安装 Kn
可以通过官方获取对应的 Kn 二进制
• macOS
• Linux
• Windows
kn 会与 kubectl 使用同样的config 文件,默认使用 $HOME/.kube/config
服务管理
使用 Kn 命令可以执行: list, create, delete, apply, 和 update 操作Knative services.
创建服务
使用 create 命令:kn service create
示例:
$ kn service create helloworld-go --env TARGET=knative --image registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
yuncs.com/knative-sample/helloworld-go:73fbdd56
Creating service 'helloworld-go' in namespace 'default':
0.116s The Route is still working to reflect the latest desired specification.
0.216s Configuration "helloworld-go" is waiting for a Revision to become ready.
3.075s ...
3.149s Ingress has not yet been reconciled.
3.299s ...
3.762s Ready to serve.
Service 'helloworld-go' created to latest revision 'helloworld-go-pyqqz-1' is available at URL:
http://helloworld-go.default.example.com
使用 apply 命令:kn service apply
示例:
# Create an initial service with using 'kn service apply', if the service has not
# been already created
kn service apply s0 --image registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
# Apply the service again which is a no-operation if none of the options changed
kn service apply s0 --image registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
# Add an environment variable to your service. Note, that you have to always fully
# specify all parameters (in contrast to 'kn service update')
kn service apply s0 --image registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 --env TARGET=knative
# Read the service declaration from a file
kn service apply s0 --filename my-svc.yml
查看服务
查询服务列表示例:
kn service list
NAME URL LATEST AGE CONDITIONS READY REASON
helloworld-go http://helloworld-go.default.example.com helloworld-go-pyqqz-1 55s 3 OK / 3 True
查询服务详情示例:
kn service describe helloworld-go
Name: helloworld-go
Namespace: default
Age: 14m
URL: http://helloworld-go.default.example.com
Revisions:
100% @latest (helloworld-go-cvclp-2) [2](9m)
Image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8 (pinned to 032b80)
Conditions:
OK TYPE AGE REASON
++ Ready 9m
++ ConfigurationsReady 9m
++ RoutesReady 9m
或者以 yaml 方式展示详情:
$ kn service describe helloworld-go -oyaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
annotations:
serving.knative.dev/creator: 1041208914252405-1606806762
serving.knative.dev/lastModifier: 1041208914252405-1606806762
creationTimestamp: "2020-12-09T06:07:41Z"
generation: 2
name: helloworld-go
namespace: default
resourceVersion: "39555635"
selfLink: /apis/serving.knative.dev/v1/namespaces/default/services/helloworld-go
uid: 763e8214-7c2d-476c-bd88-40b32a30597d
spec:
template:
metadata:
annotations:
client.knative.dev/user-image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8
creationTimestamp: null
name: helloworld-go-cvclp-2
spec:
containerConcurrency: 0
containers:
- env:
- name: TARGET
value: knative
image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8
name: user-container
readinessProbe:
successThreshold: 1
tcpSocket:
port: 0
resources: {}
timeoutSeconds: 300
traffic:
- latestRevision: true
percent: 100
status:
address:
url: http://helloworld-go.default.svc.cluster.local
conditions:
- lastTransitionTime: "2020-12-09T06:13:33Z"
status: "True"
type: ConfigurationsReady
- lastTransitionTime: "2020-12-09T06:13:34Z"
status: "True"
type: Ready
- lastTransitionTime: "2020-12-09T06:13:34Z"
status: "True"
type: RoutesReady
latestCreatedRevisionName: helloworld-go-cvclp-2
latestReadyRevisionName: helloworld-go-cvclp-2
observedGeneration: 2
traffic:
- latestRevision: true
percent: 100
revisionName: helloworld-go-cvclp-2
url: http://helloworld-go.default.example.com
更新服务(创建新版本)
使用 update 命令:kn service update NAME
示例:
$ kn service update helloworld-go --image registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8
Updating Service 'helloworld-go' in namespace 'default':
3.609s Traffic is not yet migrated to the latest revision.
3.631s Ingress has not yet been reconciled.
4.066s Ready to serve.
Service 'helloworld-go' updated to latest revision 'helloworld-go-cvclp-2' is available at URL:
http://helloworld-go.default.example.com
使用 apply 也可进行更新服务
kn service apply
# Add an environment variable to your service. Note, that you have to always fully
# specify all parameters (in contrast to 'kn service update')
kn service apply s0 --image registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8 --env TARGET=knative
删除服务
示例:
kn service delete helloworld-go
版本管理
查看版本
kn revision list
NAME SERVICE TRAFFIC TAGS GENERATION AGE CONDITIONS READY REASON
helloworld-go-cvclp-2 helloworld-go 100% 2 40s 4 OK / 4 True
helloworld-go-pyqqz-1 helloworld-go 1 6m29s 3 OK / 4 True
查看版本详情
$ kn revision describe helloworld-go-cvclp-2
Name: helloworld-go-cvclp-2
Namespace: default
Age: 3m
Image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8 (pinned to 032b80)
Env: TARGET=knative
Service: helloworld-go
Conditions:
OK TYPE AGE REASON
++ Ready 3m
++ ContainerHealthy 3m
++ ResourcesAvailable 3m
I Active 2m NoTraffic
删除版本
$ kn revision delete helloworld-go-pyqqz-1
Revision 'helloworld-go-pyqqz-1' deleted in namespace 'default'.
其它
除了上面介绍的 service、revision。 Kn 还支持如下的资源操作, 有兴趣的可以自己试用一下。
• kn broker - 管理事件 brokers
• kn channel - 管理事件 channels
• kn route - 管理服务路由 routes
• kn source - 管理事件源 sources
• kn trigger - 管理事件 triggers