mirror of https://github.com/knative/docs.git
Updating the last few commands to remove EOF (#4083)
* Updating the last few commands * Fix some formatting issues * Tweak YAML file to match the docs * Fix failing test * Apply suggestions from code review Co-authored-by: Ashleigh Brennan <abrennan@redhat.com> * Replace curly braces * Fix formatting * Formatting and other tweaks * capitalise YAML Co-authored-by: Ashleigh Brennan <abrennan@redhat.com>
This commit is contained in:
parent
a0bdedc4f3
commit
978c926265
|
|
@ -23,36 +23,36 @@ cd knative-docs/docs/serving/samples/hello-world/helloworld-java-spring
|
|||
1. From the console, create a new, empty web project by using the `curl` and `unzip`
|
||||
commands:
|
||||
|
||||
```bash
|
||||
curl https://start.spring.io/starter.zip \
|
||||
```bash
|
||||
curl https://start.spring.io/starter.zip \
|
||||
-d dependencies=web \
|
||||
-d name=helloworld \
|
||||
-d artifactId=helloworld \
|
||||
-o helloworld.zip
|
||||
unzip helloworld.zip
|
||||
```
|
||||
unzip helloworld.zip
|
||||
```
|
||||
|
||||
If you don't have `curl` installed, you can accomplish the same by visiting the
|
||||
[Spring Initializr](https://start.spring.io/) page. Specify Artifact as
|
||||
`helloworld` and add the `Web` dependency. Then click **Generate Project**,
|
||||
download and unzip the sample archive.
|
||||
If you don't have `curl` installed, you can accomplish the same by visiting the
|
||||
[Spring Initializr](https://start.spring.io/) page. Specify Artifact as
|
||||
`helloworld` and add the `Web` dependency. Then click **Generate Project**,
|
||||
download and unzip the sample archive.
|
||||
|
||||
1. Update the `SpringBootApplication` class in
|
||||
`src/main/java/com/example/helloworld/HelloworldApplication.java` by adding a
|
||||
`@RestController` to handle the "/" mapping and also add a `@Value` field to
|
||||
provide the `TARGET` environment variable:
|
||||
|
||||
```java
|
||||
package com.example.helloworld;
|
||||
```java
|
||||
package com.example.helloworld;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@SpringBootApplication
|
||||
public class HelloworldApplication {
|
||||
@SpringBootApplication
|
||||
public class HelloworldApplication {
|
||||
|
||||
@Value("${TARGET:World}")
|
||||
String target;
|
||||
|
|
@ -68,96 +68,101 @@ cd knative-docs/docs/serving/samples/hello-world/helloworld-java-spring
|
|||
public static void main(String[] args) {
|
||||
SpringApplication.run(HelloworldApplication.class, args);
|
||||
}
|
||||
}
|
||||
```
|
||||
}
|
||||
```
|
||||
|
||||
1. Run the application locally:
|
||||
|
||||
```bash
|
||||
./mvnw package && java -jar target/helloworld-0.0.1-SNAPSHOT.jar
|
||||
```
|
||||
```bash
|
||||
./mvnw package && java -jar target/helloworld-0.0.1-SNAPSHOT.jar
|
||||
```
|
||||
|
||||
Go to `http://localhost:8080/` to see your `Hello World!` message.
|
||||
Go to `http://localhost:8080/` to see your `Hello World!` message.
|
||||
|
||||
1. In your project directory, create a file named `Dockerfile` and copy the following code block into it:
|
||||
|
||||
```docker
|
||||
# Use the official maven/Java 8 image to create a build artifact: https://hub.docker.com/_/maven
|
||||
FROM maven:3.5-jdk-8-alpine as builder
|
||||
```docker
|
||||
# Use the official maven/Java 8 image to create a build artifact: https://hub.docker.com/_/maven
|
||||
FROM maven:3.5-jdk-8-alpine as builder
|
||||
|
||||
# Copy local code to the container image.
|
||||
WORKDIR /app
|
||||
COPY pom.xml .
|
||||
COPY src ./src
|
||||
# Copy local code to the container image.
|
||||
WORKDIR /app
|
||||
COPY pom.xml .
|
||||
COPY src ./src
|
||||
|
||||
# Build a release artifact.
|
||||
RUN mvn package -DskipTests
|
||||
# Build a release artifact.
|
||||
RUN mvn package -DskipTests
|
||||
|
||||
# Use the Official OpenJDK image for a lean production stage of our multi-stage build.
|
||||
# https://hub.docker.com/_/openjdk
|
||||
# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
|
||||
FROM openjdk:8-jre-alpine
|
||||
# Use the Official OpenJDK image for a lean production stage of our multi-stage build.
|
||||
# https://hub.docker.com/_/openjdk
|
||||
# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
|
||||
FROM openjdk:8-jre-alpine
|
||||
|
||||
# Copy the jar to the production image from the builder stage.
|
||||
COPY --from=builder /app/target/helloworld-*.jar /helloworld.jar
|
||||
# Copy the jar to the production image from the builder stage.
|
||||
COPY --from=builder /app/target/helloworld-*.jar /helloworld.jar
|
||||
|
||||
# Run the web service on container startup.
|
||||
CMD ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/helloworld.jar"]
|
||||
# Run the web service on container startup.
|
||||
CMD ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/helloworld.jar"]
|
||||
|
||||
```
|
||||
For detailed instructions on dockerizing a Spring Boot app, see [Spring Boot with Docker](https://spring.io/guides/gs/spring-boot-docker/).
|
||||
```
|
||||
For detailed instructions on dockerizing a Spring Boot app, see [Spring Boot with Docker](https://spring.io/guides/gs/spring-boot-docker/).
|
||||
|
||||
For additional information on multi-stage docker builds for Java see [Creating Smaller Java Image using Docker Multi-stage Build](http://blog.arungupta.me/smaller-java-image-docker-multi-stage-build/).
|
||||
|
||||
!!! note
|
||||
Use Docker to build the sample code into a container. To build and push with Docker Hub, run these commands replacing `{username}` with your Docker Hub username.
|
||||
For additional information on multi-stage docker builds for Java see [Creating Smaller Java Image using Docker Multi-stage Build](http://blog.arungupta.me/smaller-java-image-docker-multi-stage-build/).
|
||||
|
||||
1. Use Docker to build the sample code into a container, then push the container to the Docker registry:
|
||||
|
||||
```bash
|
||||
# Build the container on your local machine
|
||||
docker build -t {username}/helloworld-java-spring .
|
||||
```bash
|
||||
# Build the container on your local machine
|
||||
docker build -t {username}/helloworld-java-spring .
|
||||
|
||||
# Push the container to docker registry
|
||||
docker push {username}/helloworld-java-spring
|
||||
```
|
||||
Where `{username}` is your Docker Hub username.
|
||||
|
||||
|
||||
# Push the container to docker registry
|
||||
docker push {username}/helloworld-java-spring
|
||||
```
|
||||
## Deploying the app
|
||||
|
||||
After the build has completed and the container is pushed to Docker Hub, you can deploy the app into your cluster.
|
||||
|
||||
During the creation of a Service, Knative performs the following steps:
|
||||
|
||||
=== "yaml"
|
||||
- Create a new immutable revision for this version of the app.
|
||||
- Network programming to create a Route, ingress, Service, and load balancer for your app.
|
||||
- Automatically scale your pods up and down, including scaling down to zero active pods.
|
||||
|
||||
1. Create a new file, `service.yaml` and copy the following service definition
|
||||
into the file. Make sure to replace `{username}` with your Docker Hub
|
||||
username.
|
||||
To deploy the app:
|
||||
|
||||
```yaml
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: serving.knative.dev/v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: helloworld-java-spring
|
||||
namespace: default
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: docker.io/{username}/helloworld-java-spring
|
||||
env:
|
||||
- name: TARGET
|
||||
value: "Spring Boot Sample v1"
|
||||
EOF
|
||||
```
|
||||
=== "YAML"
|
||||
|
||||
Ensure that the container image value
|
||||
in `service.yaml` matches the container you built in the previous step. Apply
|
||||
the configuration using `kubectl`:
|
||||
1. Create a new file named `service.yaml` and copy the following service definition
|
||||
into the file:
|
||||
|
||||
```bash
|
||||
kubectl apply --filename service.yaml
|
||||
```
|
||||
```yaml
|
||||
apiVersion: serving.knative.dev/v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: helloworld-java-spring
|
||||
namespace: default
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: docker.io/{username}/helloworld-java-spring
|
||||
env:
|
||||
- name: TARGET
|
||||
value: "Spring Boot Sample v1"
|
||||
```
|
||||
Where `{username}` is your Docker Hub username.
|
||||
|
||||
!!! note
|
||||
Ensure that the container image value in `service.yaml` matches the container you built in the previous step.
|
||||
|
||||
1. Apply the YAML file by running the command:
|
||||
|
||||
```bash
|
||||
kubectl apply -f service.yaml
|
||||
```
|
||||
|
||||
=== "kn"
|
||||
|
||||
|
|
@ -170,69 +175,55 @@ After the build has completed and the container is pushed to Docker Hub, you can
|
|||
This will wait until your service is deployed and ready, and ultimately it will print the URL through which you can access the service.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
During the creation of a Service, Knative performs the following steps:
|
||||
|
||||
- Create a new immutable revision for this version of the app.
|
||||
- Network programming to create a Route, ingress, Service, and load balancer for your app.
|
||||
- Automatically scale your pods up and down, including scaling down to zero active pods.
|
||||
|
||||
## Verification
|
||||
|
||||
1. Find the domain URL for your service:
|
||||
|
||||
=== "kubectl"
|
||||
```bash
|
||||
kubectl get ksvc helloworld-java-spring --output=custom-columns=NAME:.metadata.name,URL:.status.url
|
||||
```
|
||||
|
||||
=== "kubectl"
|
||||
```bash
|
||||
kubectl get ksvc helloworld-java-spring --output=custom-columns=NAME:.metadata.name,URL:.status.url
|
||||
```
|
||||
Example:
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
NAME URL
|
||||
helloworld-java-spring http://helloworld-java-spring.default.1.2.3.4.xip.io
|
||||
```
|
||||
```bash
|
||||
NAME URL
|
||||
helloworld-java-spring http://helloworld-java-spring.default.1.2.3.4.xip.io
|
||||
```
|
||||
|
||||
|
||||
=== "kn"
|
||||
|
||||
```bash
|
||||
kn service describe helloworld-java-spring -o url
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
http://helloworld-java-spring.default.1.2.3.4.xip.io
|
||||
```
|
||||
=== "kn"
|
||||
|
||||
```bash
|
||||
kn service describe helloworld-java-spring -o url
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
http://helloworld-java-spring.default.1.2.3.4.xip.io
|
||||
```
|
||||
|
||||
1. Make a request to your app and observe the result. Replace
|
||||
the following URL with the URL returned in the previous command.
|
||||
|
||||
Example:
|
||||
Example:
|
||||
|
||||
```bash
|
||||
curl http://helloworld-java-spring.default.1.2.3.4.sslip.io
|
||||
Hello Spring Boot Sample v1!
|
||||
```bash
|
||||
curl http://helloworld-java-spring.default.1.2.3.4.sslip.io
|
||||
Hello Spring Boot Sample v1!
|
||||
|
||||
# Even easier with kn:
|
||||
curl $(kn service describe helloworld-java-spring -o url)
|
||||
```
|
||||
# Even easier with kn:
|
||||
curl $(kn service describe helloworld-java-spring -o url)
|
||||
```
|
||||
|
||||
!!! tip
|
||||
Add `-v` option to get more detail if the `curl` command failed.
|
||||
!!! tip
|
||||
Add `-v` option to get more detail if the `curl` command fails.
|
||||
|
||||
## Deleting the app
|
||||
|
||||
To remove the sample app from your cluster, delete the service.
|
||||
|
||||
|
||||
=== "kubectl"
|
||||
```bash
|
||||
kubectl delete -f service.yaml
|
||||
|
|
|
|||
|
|
@ -96,30 +96,35 @@ We can replace the default gateway with our own gateway with following steps.
|
|||
|
||||
Let's say you replace the default `knative-ingress-gateway` gateway with
|
||||
`knative-custom-gateway` in `custom-ns`.
|
||||
First, we create the `knative-custom-gateway` gateway.
|
||||
First, create the `knative-custom-gateway` gateway:
|
||||
|
||||
```
|
||||
cat <<EOF | kubectl apply -f -
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: Gateway
|
||||
metadata:
|
||||
name: knative-custom-gateway
|
||||
namespace: custom-ns
|
||||
spec:
|
||||
selector:
|
||||
istio: ingressgateway
|
||||
servers:
|
||||
- port:
|
||||
number: 80
|
||||
name: http
|
||||
protocol: HTTP
|
||||
hosts:
|
||||
- "*"
|
||||
EOF
|
||||
```
|
||||
1. Create a YAML file using the following template:
|
||||
|
||||
!!! note
|
||||
Replace the label selector `istio: ingressgateway` with the label of your service.
|
||||
```yaml
|
||||
apiVersion: networking.istio.io/v1alpha3
|
||||
kind: Gateway
|
||||
metadata:
|
||||
name: knative-custom-gateway
|
||||
namespace: custom-ns
|
||||
spec:
|
||||
selector:
|
||||
istio: <service-label>
|
||||
servers:
|
||||
- port:
|
||||
number: 80
|
||||
name: http
|
||||
protocol: HTTP
|
||||
hosts:
|
||||
- "*"
|
||||
```
|
||||
Where `<service-label>` is a label to select your service, for example, `ingressgateway`.
|
||||
|
||||
2. Apply the YAML file by running the command:
|
||||
|
||||
```bash
|
||||
kubectl apply -f <filename>.yaml
|
||||
```
|
||||
Where `<filename>` is the name of the file you created in the previous step.
|
||||
|
||||
### Step 2: Update the gateway ConfigMap
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue