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:
Samia Nneji 2021-08-18 14:48:08 +01:00 committed by GitHub
parent a0bdedc4f3
commit 978c926265
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 137 additions and 141 deletions

View File

@ -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

View File

@ -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