macOS x86-64
minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
sudo install minikube-darwin-amd64 /usr/local/bin/minikube
minikube start --driver=hyperkit
或
minikube start
minikube dashboard
# 设置专属的namespace--flinkjob
kubectl create namespace flinkjob
# 创建一个新的 flink服务账户(flink)
kubectl create serviceaccount flink -n flinkjob
# 设置角色绑定
kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flinkjob:flink
FROM flink
RUN mkdir -p $FLINK_HOME/usrlib
COPY /path/of/my-flink-job.jar $FLINK_HOME/usrlib/my-flink-job.jar
或者测试直接用./examples/streaming/TopSpeedWindowing.jar,可以使用flink1.15.0基础镜像
minikube客户端将直接与集群中的容器运行时对话,并在那里对同一存储运行负载命令。
$ minikube image load my_image
./bin/flink run-application \
--target kubernetes-application \
-Dkubernetes.cluster-id=my-first-application-cluster \
-Dkubernetes.container.image=custom-image-name \
-Dkubernetes.namespace=flinkjob \
local:///opt/flink/usrlib/my-flink-job.jar
./bin/flink run-application \
-target kubernetes-application \
-Dkubernetes.cluster-id=my-test-flink-k8s \
-Dkubernetes.container.image=flinkk8s:1.15.0 \
-Dkubernetes.rest-service.exposed.type=NodePort \
-Dkubernetes.jobmanager.cpu=0.2 \
-Dkubernetes.taskmanager.cpu=0.1 \
-Dtaskmanager.numberOfTaskSlots=1 \
-Djobmanager.memory.process.size=1024m \
-Dtaskmanager.memory.process.size=1024m \
-Dkubernetes.namespace=flinkjob \
local:///opt/flink/examples/streaming/TopSpeedWindowing.jar
./bin/flink run-application -p 1 -t kubernetes-application \
--detached \
--allowNonRestoredState \ # 从指定savepoint启动,不需要时可省略掉
--fromSavepoint oss://flinkjob-state-prod/savepoint-f1e2d7-3108369d7445 \ # 从指定savepoint启动不需要时可省略掉
-Dkubernetes.namespace=flinkjob \
-Dkubernetes.jobmanager.service-account=flink \
-Dkubernetes.cluster-id=flink-jobs \
-Dkubernetes.container.image.pull-policy=Always \
-Dkubernetes.container.image=*****/flink-jobs:git.c2f4bba9ffbc26a077ae73d8508fcce0e05752ed \ # 对应镜像地址
-Djobmanager.memory.process.size=1024m \
-Dtaskmanager.memory.process.size=1024m \
-Dkubernetes.jobmanager.cpu=0.2 \
-Dkubernetes.taskmanager.cpu=0.1 \
-Dtaskmanager.numberOfTaskSlots=1 \
-Dkubernetes.rest-service.exposed.type=NodePort \
local:///flink/flink-jobs/flink-jobs.jar # 镜像需要执行的jar地址
# 查看当前集群任务id
./bin/flink list --target kubernetes-application -Dkubernetes.cluster-id=flink-jobs -Dkubernetes.namespace=flinkjob
# stop 任务并进行状态savepoint
./bin/flink stop --savepointPath --target kubernetes-application -Dkubernetes.cluster-id=flink-production -Dkubernetes.namespace=flinkjob
# stop集
echo 'stop' | ./bin/kubernetes-session.sh -Dkubernetes.cluster-id=flink-production -Dkubernetes.namespace=flinkjob -Dexecution.attached=true
# List running job on the cluster
$ ./bin/flink list --target kubernetes-application -Dkubernetes.cluster-id=my-first-application-cluster
# Cancel running job
$ ./bin/flink cancel --target kubernetes-application -Dkubernetes.cluster-id=my-first-application-cluster
Flink的Web UI和REST端点可以通过kubernetes.rest-service.exposed.type配置选项以多种方式公开。
$ kubectl port-forward service/8081
访问webUI:http://localhost:8081
Role-based access control (RBAC) is a method of regulating access to compute or network resources based on the roles of individual users within an enterprise. Users can configure RBAC roles and service accounts used by JobManager to access the Kubernetes API server within the Kubernetes cluster.
Every namespace has a default service account. However, the default service account may not have the permission to create or delete pods within the Kubernetes cluster. Users may need to update the permission of the default service account or specify another service account that has the right role bound.
$ kubectl create clusterrolebinding flink-role-binding-default --clusterrole=edit --serviceaccount=default:default
If you do not want to use the default service account, use the following command to create a new flink-service-account service account and set the role binding. Then use the config option -Dkubernetes.service-account=flink-service-account to make the JobManager pod use the flink-service-account service account to create/delete TaskManager pods and leader ConfigMaps. Also this will allow the TaskManager to watch leader ConfigMaps to retrieve the address of JobManager and ResourceManager.
$ kubectl create serviceaccount flink-service-account $ kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=default:flink-service-account
Please refer to the official Kubernetes documentation on RBAC Authorization for more information.