CKA with Practice Tests

CKA with Practice Tests

Mock Exam - 1

1
2
3
4

No.1

Deploy a pod named nginx-pod using the nginx:alpine image.
1
2
3
Answer:

kubectl run nginx-pod --image=nginx:alpine --restart=Never
1
2
3
4

No.2

Deploy a messaging pod using the redis:alpine image with the labels set to tier=msg.
1
2
Answer:
kubectl run messaging --generator=run-pod/v1 --restart=Never --image=redis:alpine -l tier=msg
1
2
No.3
Create a namespace named apx-x9984574

kubectl create ns apx-x9984574

1
2
3
4

No.4

Get the list of nodes in JSON format and store it in a file at /opt/outputs/nodes-z3444kd9.json

誤:

kubectl get nodes -o=jsonpath=’{.items[*].metadata.name}’ > /opt/outputs/nodes-z3444kd9.json

正解:

kubectl get nodes -o json > /opt/outputs/nodes-z3444kd9.json

1
2
3
4
5
6

No.5

Create a service messaging-service to expose the messaging application within the cluster on port 6379.

Use imperative commands

Create a service messaging-service to expose the messaging application within the cluster on port 6379.

1
2
3
4

No.6

Create a deployment named hr-web-app using the image kodekloud/webapp-color with 2 replicas

kubectl create deploy hr-web-app –image=kodekloud/webapp-color

kubectl scale deploy hr-web-app –replicas=2

1
2
3
4
5
6

No.7

Create a static pod named static-busybox that uses the busybox image and the command sleep 1000

Use imperative commands

誤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

apiVersion: v1

kind: Pod

metadata:

name: static-busybox

spec:

containers:



- name: static-busybox

image: busybox

command: ["sleep"]

args: ["1000"]

https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/#static-pod-creation

https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/

正解:

kubectl run –restart=Never –image=busybox static-busybox –dry-run -o yaml –command – sleep 1000 > /etc/kubernetes/manifests/static-busybox.yaml

1
2
3
4

No.8

Create a POD in the finance namespace named temp-bus with the image redis:alpine.

kubectl run temp-bus -n finance –image=redis:alpine –restart=Never

1
2
3
4

No.9

A new application orange is deployed. There is something wrong with it. Identify and fix the issue.

command sleep

1
2
3
4
5
6

No.10

Expose the hr-web-app as service hr-web-app-service application on port 30082 on the nodes on the cluster

The web application listens on port 8080


kubectl expose deploy hr-web-app –name=hr-web-app-service –port=33082

1
2
正解
kubectl expose deployment hr-web-app --type=NodePort --port=8080 --name=hr-web-app-service --dry-run -o yaml > hr-web-app-service.yaml
1
No.11

kubectl get node -o=jsonpath=’{.items[*].status.nodeInfo.osImage}’ > /opt/outputs/nodes_os_x43kj56.txt

1
2
No.12
Create a Persistent Volume with the given specification.
1
2
3
4
5
6
7
8
9
10
11
12
13
#Answer:

apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-analytics
spec:
capacity:
storage: 100Mi
accessModes:
- ReadWriteMany
hostPath: # directory location on host
path: /pv/data-analytics

https://kubernetes.io/docs/concepts/storage/persistent-volumes/#types-of-persistent-volumes
https://kubernetes.io/docs/concepts/storage/volumes/

Mock Exam - 2

1
2
No.1
Take a backup of the etcd cluster and save it to /tmp/etcd-backup.db
1
2
3
4
5
6
7
8
9
10
11
12
13
Answer:
ETCDCTL_API=3 etcdctl --version
cd /etc/kubernetes/manifests/

ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernets/pki/etcd/healthcheck-client.key member list

#save
ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key snapshot save /tmp/etcd-backup.db

#verify the status
ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernets/pki/etcd/healthcheck-client.key snapshot status /tmp/etcd-backup.db -w table

https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster
1
2
3
4
5
6
7
8
9
10

No.2

Create a Pod called redis-storage with image: redis:alpine with a Volume of type emptyDir that lasts for the life of the Pod. Specs on the right.

Pod named 'redis-storage' created

Pod 'redis-storage' uses Volume type of emptyDir

Pod 'redis-storage' uses volumeMount with mountPath = /data/redis
1
2
3
Answer:
kubectl run redis-storage --image=redis:alpine --restart=Never -o yaml --dry-run > redis-storage.yaml
kubectl apply -f redis-torage.yaml

https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/#configure-a-volume-for-a-pod

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: redis-storage
name: redis-storage
spec:
containers:
- image: redis:alpine
name: redis-storage
volumeMounts:
- mountPath: /data/redis
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}

https://kubernetes.io/docs/concepts/storage/volumes/

1
2
3
4
5
6
7
No.3
Create a new pod called super-user-pod with image busybox:1.28. Allow the pod to be able to set system_time
The container should sleep for 4800 seconds

Pod: super-user-pod
Container Image: busybox:1.28
SYS_TIME capabilities for the conatiner?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Answer:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
name: super-user-pod
spec:
containers:
- image: busybox:1.28
name: super-user-pod
command: ["sleep","4800"]
securityContext:
capabilities:
add: ["SYS_TIME"]

https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-capabilities-for-a-container

https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod

1
2
3
4
5
6
7
8
No.4
A pod definition file is created at /root/use-pv.yaml. Make use of this manifest file and mount the persistent volume called pv-1. Ensure the pod is running and the PV is bound.

mountPath: /data persistentVolumeClaim Name: my-pvc

persistentVolume Claim configured correctly
pod using the correct mountPath
pod using the persistent volume claim?
1
2
3
Answer:
kubectl apply -f pvc.yaml
https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims

#pvc.yaml

1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 8Gi
1
2
3
4
#check status is "Bound"
kubectl get pv
#add volumes to use-pv.yaml
https://kubernetes.io/docs/concepts/storage/persistent-volumes/#claims-as-volumes
1
2
3
4
5
6
7
8
9
10

No.5

Create a new deployment called nginx-deploy, with image nginx:1.16 and 1 replica. Record the version. Next upgrade the deployment to version 1.17 using rolling update. Make sure that the version upgrade is recorded in the resource annotation.

Deployment : nginx-deploy. Image: nginx:1.16

Image: nginx:1.16
Task: Upgrade the version of the deployment to 1:17
Task: Record the changes for the image upgrade
1
2
3
4
5
6
7
8
9
10
Answer:

kubectl run nginx-deploy --image=nginx:1.16 --replicas=1 --record
kubectl rollout history deploy nginx-deploy
kubectl set image deployment/nginx-deploy nginx-deploy=nginx:1.17 --record

#verify
kubectl rollout history deploy nginx-deploy
kubectl describe deploy nginx-deploy | grep -i image
kubectl describe pod nginx-deploy-5bd9796fd6-z92f9 | grep image
1
2
3
4
5
6
7
8
9
10

No.6

Create a new user called john. Grant him access to the cluster. John should have permission to create, list, get, update and delete pods in the development namespace . The private key exists in the location: /root/john.key and csr at /root/john.csr

CSR: john-developer Status:Approved

Role Name: developer, namespace: development, Resource: Pods

Access: User 'john' has appropriate permissions
1
2
3

#verify
kubectl api-versions | grep certif
1
2
3
4
5
6
7
8
9
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequestmetadata:
name: john-developer
spec:
request:
usages:
- digital signature
- key encipherment
- server auth
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
cat john.csr | base64 | tr -d "n"

LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ1ZEQ0NBVHdDQVFBd0R6RU5NQXNHQTFVRUF3d0VhbTlvYmpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRApnZ0VQQURDQ0FRb0NnZ0VCQU5NWkhIajI5S09XK0Jwb2ZJQUlLNFdSM3gvUnJpWEY4WlBqMWtDM1FrdDM3S3BQCnFhYlB2ZDZud29yUlMyNTRYR20wWnIyanp0bkIzeXRzV1Fzd1N3aCszajBKcCt4T01IaGNQTllNRDhEcE9JQ1oKQ1BsaDVlWkp0OW1mejM0dEpaWmVWbENJT21HRmV4aVlEdjBocjBVL3crZVN2dk1XcVFad0hYcDFCUWFBcHV2ZAo1cVBudGluS3M4Sk44YzVHU1ZmT1RqdHpDLzVCditzdlZ1MTUwOThQU3dHWHFseVJWNk1hQ0ZmblRvMS9ubEp5CkRtOXZ1bE9yQjBJSUQ3UWo2cnJocjhVM1c4bmttMDI2QTZjbXlIOVhXa0l4MTlWNmt1YXBndWd3b2VFbVpaVUUKSzU5YnVCU1ZWQUs1akQzV3JkZkJqTUVYN0hoR0dvTndmL2JXdUhFQ0F3RUFBYUFBTUEwR0NTcUdTSWIzRFFFQgpDd1VBQTRJQkFRQ3JxRTZmVDk3ZGc4VlluaHpwcmhxMGg5SUdVSk9MTmc2YXZ3OUEwWlB2M3lrUGZscm9SaGtXClFVNG1ZNWpuUndpOW1LTlZ0azYwekVPWGc2SjhyTUZ4N21OWFNaYkRWVk5MSkdqT1UrcVZyakVTOHVRZDVhWWgKaTZFWXJIcG5sdHFpRzRKZjdHdjViYzRHTGNrUWRKSEhTWGJrc0RCOG9ETWp4bXc5c0g2SldhNFhJR1oxbU9NWgpCYjUvVjByTXBCaHowRjhFczgwT01kS1B6aXd2VnBhbDVaVHlkT21CS2owVm5OY05sTHdibGltSmdYL1UvOHRaCmZNR296Q3VIUlNQSlUzREQ5TlFDVUNuWDQ4TitlNWsvNlhjMSsyK2V0NW1kY0lyTmdRY2dveVNIVkhDL3Q1YzYKWVhBU2xqYjl1blhjb1dSMVhyNi9LdUU2bUNTekZackYKLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCg==

kubectl get csr

# Check CONDITION(Approved,Issued)

kubectl certificate approve john-developer
kubectl get csr

#Create role developer
kubectl create role developer --resource=pods --verb=create,list,get,update,delete --namespace=development

#Verify
kubectl describe role developer -n development

#Create rolebinding
kubectl create rolebinding developer-role-binding --role=developer --user=john --namespace=development



#Verify

kubectl describe rolebinding.rbac.authorization.k8s.io developer-role-binding -n development
kubectl auth can-i update pods --namespace=development --as=john
kubectl auth can-i create pods --namespace=development --as=john
kubectl auth can-i list pods --namespace=development --as=john
kubectl auth can-i get pods --namespace=development --as=john
kubectl auth can-i delete pods --namespace=development --as=john

https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/
1
2
3
4
5
6
7
No.7

Create an nginx pod called nginx-resolver using image nginx, expose it internally with a service called nginx-resolver-service. Test that you are able to look up the service and pod names from within the cluster. Use the image: busybox:1.28 for dns lookup. Record results in /root/nginx.svc and /root/nginx.pod

Pod: nginx-resolver created
Service DNS Resolution recorded correctly
Pod DNS resolution recorded correctly
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Anser:

#Create pod
kubectl run nginx-resolver --image=nginx --generator=run-pod/v1

#Create service
kubectl expose pod nginx-resolver --name=nginx-resolver-service --port=80 --target-port=80 --type=ClusterIP

#verify svc
kubectl describe svc nginx-resolver-service
kubectl get pod nginx-resolver -o wide

#nslookup

#It doesn't work,I think the image is not good.
kubectl run --generator=run-pod/v1 test-nslookup --image=busybox:1.28 --rm -it -- nslookup nginx-resolver-service

#method1 :copy the result for the logs,without server
kubectl logs test-nslookup

#method2 : didn't work
kubectl run --generator=run-pod/v1 test-nslookup --image=busybox:1.28 --rm -it -- nslookup nginx-resolver-service > /root/nginx.svc
1
2
3
4
5
6
7
8
No.8

Create a static pod on node01 called nginx-critical with image nginx. Create this pod on node01 and make sure that it is recreated/restarted automatically in case of a failure.

Use /etc/kubernetes/manifests as the Static Pod path for example.

Kubelet Configured for Static Pods
Pod nginx-critical-node01 is Up and running
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Answer:

#Login to node01
ssh node01

#Check configure --config's path
systemctl status kubelet

#Get the static pod's path
cd /var/lib/kubelet/
cat config.yaml | grep static

#Get the path is /etc/kubernetes/manifests
cd /etc/kubernetes/

#Create directory manifests
mkdir manifests

#Back to master
logout

kubectl run --generator=run-pod/v1 nginx-critical --image=nginx --dry-run -o yaml > nginx-critical.yaml

cat nginx-critical.yaml

#Login to node01
ssh node01

docker ps | grep -i nginx



#create static in /etc/kubernetes/manifests
cd /etc/kubernetes

vim nginx-critical.yaml
```yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
​ run: nginx-critical
name: nginx-critical
spec:
containers:
- image: nginx
​ name: nginx-critical
​ resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}

Mock Exam - 3

1
2
3
4
5
6
7
8
9
10
No.1
Create a new service account with the name pvviewer. Grant this Service account access to list all PersistentVolumes in the cluster by creating an appropriate cluster role called pvviewer-role and ClusterRoleBinding called pvviewer-role-binding.

Next, create a pod called pvviewer with the image: redis and serviceAccount: pvviewer in the default namespace

ServiceAccount: pvviewer
ClusterRole: pvviewer-role
ClusterRoleBinding: pvviewer-role-binding
Pod: pvviewer
Pod configured to use ServiceAccount pvviewer ?
1
2
3
4
5
6
7
8
9
10
11
Answer:

#Create sa
kubectl create sa pvviewer

#Create clusterrole
kubectl create clusterrole pvviewer-role --resource=persistentvolumes --verb=list

#Create cluster role binding
kubectl create clusterrolebinding pvviewer-role-binding --clusterrole=pvviewer-role --serviceaccount=default:pvviewer
#https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#service-account-token-volume-projection
1
2
3
4
No.2
List the InternalIP of all nodes of the cluster. Save the result to a file /root/node_ips

Answer should be in the format: InternalIP of master<space>InternalIP of node1<space>InternalIP of node2<space>InternalIP of node3 (in a single line)
1
2
3
4
5
6
7
8
9
10
11
12
13
Answer:

# Get ExternalIPs of all nodes
#https://kubernetes.io/docs/reference/kubectl/cheatsheet/

#Check get internalip
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'

#copy the stuff to node_ips file
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}' > /root/node_ips

#Verify the node_ips file
cat /root/node_ips
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
No.3
Create a pod called multi-pod with two containers.
Container 1, name: alpha, image: nginx
Container 2: beta, image: busybox, command sleep 4800.

Environment Variables:
container 1:
name: alpha



Container 2:
name: beta
Pod Name: multi-pod

Container 1: alpha
Container 2: beta
Container beta commands set correctly?
Container 1 Environment Value Set
Container 2 Environment Value Set
1
2
3

Answer:
kubectl run --generator=run-pod/v1 alpha --image=nginx --dry-run -o yaml > multi-pod.yaml

#Edit the yaml file

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: v1
kind: Pod
metadata:
name: multi-pod
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: alpha
env:
- name: name
value: alpha
- image: busybox
name: beta
env:
- name: name
value: beta
command: ["sleep","4800"]

​```sh
#Verify
kubectl describe pod multi-pod

1
2
3
4
5
6
7
8



```html
No.4
Create a Pod called non-root-pod , image: redis:alpine
runAsUser: 1000
fsGroup: 2000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Answer:

kubectl run non-root-pod --generator=run-pod/v1 --image=redis:alpine --dry-run -o yaml > non-root-pod.yaml

#https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
```yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
​ run: non-root-pod
name: non-root-pod
spec:
containers:
- image: redis:alpine
​ imagePullPolicy: IfNotPresent
​ name: non-root-pod
securityContext:
​ runAsUser: 1000
​ fsGroup: 2000
1
2
3
4
No.5
We have deployed a new pod called np-test-1 and a service called np-test-service. Incoming connections to this service are not working. Troubleshoot and fix it.

Create NetworkPolicy, by the name ingress-to-nptest that allows incoming connections to the service over port 80
1
2
3
4
5
6
7
8
9
10
11
12
Answer:
kubectl run --generator=run-pod/v1 test-np --image=busybox:1.28 --rm -it -- sh
nc -z -v -w 2 np-test-service 80

#Check network policy
kubectl describe netpol defautl-deny

#Create network policy
#https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource

#Check network version
kubectl api-versions | grep -i network
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: ingress-to-nptest
namespace: default
spec:
podSelector:
matchLabels:
run: np-test-1
policyTypes:
- Ingress
ingress:
- ports:
- port: 80
protocol: TCP
1
2
3
#Check again
kubectl run --generator=run-pod/v1 test-np --image=busybox:1.28 --rm -it -- sh
nc -z -v -w 2 np-test-service 80
1
2
3
4
5
6
7
8
9
10
11

No.6

Taint the worker node node01 to be Unschedulable. Once done, create a pod called dev-redis, image redis:alpine to ensure workloads are not scheduled to this worker node. Finally, create a new pod called prod-redis and image redis:alpine with toleration to be scheduled on node01.

Key = env_type
Value = production
Effect = NoSchedule

pod 'dev-redis' (no tolerations) is not scheduled on node01?
Create a pod 'prod-redis' to run on node01
1
2
3
4
5
6
7
8

Answer:

#Get nodes
kubectl get nodes
kubectl taint node node01 env_type=production:NoSchedule
kubectl describe nodes node01 | grep -i taint
kubectl run dev-redis --generator=run-pod/v1 --image=redis:alpine
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
name: prod-redis
namespace: default
spec:
containers:
- image: redis:alpine
imagePullPolicy: IfNotPresent
name: prod-redis
tolerations:
- effect: NoSchedule
key: env_type
operator: Equal
value: production
1
2
3
4
5
6
No.7
Create a pod called hr-pod in hr namespace belonging to the production environment and frontend tier .
image: redis:alpine

hr-pod labeled with environment production?
hr-pod labeled with frontend tier?
1
2
3
4
5
6
7
8
9
10
11
Answer:
kubectl get ns

#If there is no namespace named hr,create it
kubectl create ns hr

#Create pod named hr-pod
kubectl run hr-pod --generator=run-pod/v1 --labels=environment=production,tier=frontend --image=redis:alpine --namespace=hr

#Verify
kubectl -n hr get pods --show-labels
1
2
3
4
No.8
A kubeconfig file called super.kubeconfig has been created in /root. There is something wrong with the configuration. Troubleshoot and fix it.

Fix /root/super.kubeconfig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Answer:
cd .kube/
ls -ltr

#Check server ip and port
cat config | grep server

#Check file super.kubeconfig
kubectl cluster-info --kubeconfig=/root/super.kubeconfig

#Change port
sed -i 's/2379/6443/g' super.kubeconfig

#Check file again
kubectl cluster-info --kubeconfig=/root/super.kubeconfig
1
2
3
4
No.9
We have created a new deployment called nginx-deploy. scale the deployment to 3 replicas. Has the replica's increased? Troubleshoot the issue and fix it.

deployment has 3 replicas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Answer:
#Check deployment nginx-deploy
kubectl get deployment

#scale nginx-deploy to 3 replicas
kubectl scale deploy nginx-deploy --replicas=3

#Check deployment nginx-deploy
kubectl describe deployments. nginx-deploy

#Check pod
kubectl get pods
kubectl get pods -n kube-system

#Edit static pod kube-controller-manager,modified label component's value
grep contro1ler kube-controller-manager.yaml | wc -l
sed -i 's/contro1ler/conroller/g' kube-controller-manager.yaml
grep controller kube-contro1ler-manager.yaml | wc -l
grep controller kube-controller-manager.yaml | wc -l

trouble-hexo

setting hexo git repository

_config.yaml

deploy:

type: git

repository: https://github.com/$name/$name.github.io.git

branch: master

add images to hexo

post_asset_folder: true

How to add Image to Hexo Blog Post

update to github

git add .

git commit -m

git push

generate before deployment

hexo g -d

specific url

git repository -> setting -> cutom domain

setting your url

Add tags and category

tags: [tag1,tag2,tag3]

categories:

“- [cat1,cat2]”(without “ or “)

“- [cat2]”

Tags & Categories | Hexo - Static Site Generator | Tutorial 7

aws associate certification note

AWS Associate Solution的考试范围

Security(安全),Identity & Compliance(认证和协议),Compute(计算),Network & Content Delivery(网络和内容交付),Storage(存储),Databases(数据库),

AWS Global Infrasturcture(AWS全球基础设施)

  • Identity Access Manangement Consists Of The Following
    • Users(用户)
    • Groups(组)
    • Roles(角色)
    • Policies(策略)

NAT Gateway
ネットワークアドレス変換 (NAT) ゲートウェイを使用して、プライベートサブネットのインスタンスからはインターネットや他の AWS サービスに接続できるが、
インターネットからはこれらのインスタンスとの接続を開始できないようにすることができます。

AWS Lambda 関数スケーリング
最初のバーストの後、関数の同時実行数は、1 分ごとにさらに 500 インスタンス増加します。

冗長化
・multi az
・data center
・ec2(autoscaling)
・managed service(s3 DynamoDB Lambda)

设计(1-2备案)
・计算 lambda ec2
・网络 cloudfront route53(故障转移方式)ELB(round robin)
・存储 s3,EFS,EC2(Snapshot)
・数据 rds(multi az),DynamoDB,Redshift,backup
・中间件服务 ElasticCache(放在rds前) AutoScaling

ELB AutoScaling

本地环境和aws环境连接
direct connection
vpn
通过网络

計算

ネットワーク

  • Route53
    • シンプルルーティングポリシー
      • ドメイン特定
      • インターネットトラフィック
      • ランダムな順序で再帰的リゾルバーに返す
    • フェイルオーバールーティングポリシー
      • アクティブ・パッシブフェイルオーバー
      • 位置ルーティングポリシー
    • ユーザの場所に基づく
      • 地理的近接性ルーティングポリシー
      • リソースの場所に基づく
    • レイテンシールーティングポリシー
      • 複数の場所に基づく
      • レイテンシーが最も小さいリソース
    • 複数値回答ルーティングポリシー
      • ランダムに選ぶ
    • 最大8つの正常なレコード
    • 加重ルーティングポリシー
      • 指定した比率で複数のリソース
  • Elastic Load Balancer
    • Classic Load Balancer
      • パスに基づいてリクエストを転送するルールを持つリスナーを作成できます。これは、パスルーティングと呼ばれます。マイクロサービスを実行している場合、パスルーティングを使用して1つのALBで複数のバックエンドサービスにトラフィックをルーティングすることができます。
    • Application Load Balancer
      • 複数のバックエンドサービスにトラフィックをルーティングする際はバックエンドサービスの数に合わせてCLBを設置する必要があり、構成が複雑になってしまいます。
    • Network Load Balancer
      • OSIモデルの第 4 層で機能します。毎秒数百万のリクエストを処理できます。ロードバランサーは、接続リクエストを受信すると、デフォルトルールのターゲットグループからターゲットを選択します。リスナー構成で指定されたポート上の選択したターゲットへの TCP 接続を開こうとします。

セキュリティ

  • Amazon Cognito
    • web application mobile application 認証、許可、ユーザ管理
    • ユーザー名、パスワードでアサイン
    • Facebook,Aamazon,Googleなどのサードパーティでアサイン
    • コンポーネント:ユーザーグループ、IDグループ
      • ユーザーグループ:
        • アプリユーザーのサインアップとサインオプションを提供するユーザーディレクトリ
        • ユーザーがサインインするための組み込みのカスタマイズ可能なWeb UI
        • ユーザーディレクトリとユーザープロファイルの管理
        • 多要素認証(MFA)などのセキュリティ機能、漏洩した認証情報のチェック、アカウントの乗っ取り保護、電話とEメールによる検証
        • カスタマイズされたワークフローとAWS Lambdaトリガーによるユーザー移行
      • IDプール:AWSの他のサービスに対するアクセスをユーザーに許可する
      • 別々もしくは一緒に使用が可能
  • Encryption
    • Client Side Encryption(CSE)はクライアント内で暗合したオブジェクトをS3に登録して、暗号化キーの生成・監理はクライアント側で実行します。
    • (SES-S3)
    • AWS KMS
      • 安全で可用性の高いハードウェアおよびソフトウェアを結合するサービスであり、キーの作成と管理をマネージド型サービスで提供します。
    • Server-Side Encryption with Customer-Provided Encryption Keys (SSE-C)
      暗号化をAWSではなく、ユーザである我々が管理する鍵によって行えるようになりました。

      データベース

  • RDS
    RDSは一般的なリレーショナルデータベースとしてデータを中長期処理するために利用されます。データ処理を行って、短期間でデータを廃棄するといったライフサイクル管理には向いていません。
  • Aurora
    • リードレプリカを最大15個設置
    • 読込処理性能を向上させることが出来ます。
  • DynamoDB
    • DynamoDB Accelerator (DAX)
      • ノード:DAX クラスターは、1 つのみのプライマリノードと、0~9 個のリードレプリカノードで構成されます。
      • 簡単にリードレプリカを増やせない
      • DynamoDB Accelerator(DAX) を有効化することで、1 秒あたりのリクエスト数が数百万件になる場合でも、ミリセカンドからマイクロセカンドへの最大 10 倍のパフォーマンス向上を実現します。キャッシュを利用しているため特定のデータへの処理が高い場合などに中長期的な性能向上のために有効な対策。コストが高い
      • グローバルテーブル は、マルチリージョンにマルチマスターデータベースをデプロイするための完全マネージド型のソリューションです。これにより、高い冗長化を実現することができます

Analytics

  • Amazon Athena
    • Amazon Athena はインタラクティブなクエリサービスで、Amazon S3 内のデータを標準 SQL を使用して簡単に分析できます。Athena はサーバーレスなので、インフラストラクチャの管理は不要です。実行したクエリに対してのみ料金が発生します。
    • Athena は初期状態で AWS Glue データカタログと統合されており、さまざまなサービスでメタデータの統合リポジトリを作成できます。

      Migration

  • AWS Server Migration Service
    • WS Server Migration Service は、オンプレミスの VMware vSphere、Microsoft Hyper-V/SCVMM、または Azure 仮想マシンの AWS クラウドへの移行を自動化します。AWS SMS は、サーバー仮想マシンをクラウドホストの Amazon マシンイメージ (AMI) として段階的にレプリケートし、Amazon EC2 にデプロイします。
  • AWS Glue

    • AWS Glue は抽出、変換、ロード (ETL) を行う完全マネージド型のサービスで、お客様の分析用データの準備とロードを簡単にします。

AWS Lambda を Amazon SNS に使用する

  • Lambda 関数を使用して、Amazon Simple Notification Service 通知を処理することができます。
  • Amazon SNS は、トピックに送信されるメッセージのターゲットとして Lambda 関数をサポートしています。
  • 関数は、同じアカウントまたは他の AWS アカウントのトピックにサブスクライブ(subscribe)できます。

Lambda と Amazon SES を使用して E メールを送信するステップ

  • Lambda が API 呼び出しを実行するための AWS Identity and Access Management (IAM) アクセス許可
  • 検証済みの Amazon SES ID (ドメインまたは E メールアドレス)。
  • Amazon SES を介して E メールを送信するためのロジックを備えた Lambda 関数。

Application & Integration

  • SQS

    • SQS消息队列
    • 先进先出
    • 按用收费
  • SWF

    • SWF(simple  workflow)
    • 发起者,决策者,参与者,domains
  • swf和sqs的区别

    • swf面向任务,sqs面向消息
    • swf只执行一次不回重复;sqs可能会被处理多次
  • SES

    • Amazon SESデジタルマーケティング担当者やアプリケーション開発者がマーケティング、通知、トランザクションに関するEメールを送信できるように設計された、クラウドベースのEメール送信サービスです。
  • SNS

    • Amazon SNS を利用すれば、アプリケーションは「プッシュ」メカニズムを使用して、複数のサブスクライバーにタイミングが重要なメッセージを送信することができます。そのため、更新を定期的に確認したり、「ポーリング」したりする必要性がなくなります。

      HA Architecure

      • CloudFormation
    • リソースのモデル化およびセットアップに役立つサービスです。リソース管理に割く時間を減らし、AWS で実行するアプリケーションにさらに注力できるようになります。

      Store

    • EC2
      • EBS
        • のスナップショット取得のライフサイクルポリシーを設定できます。Amazon Data Lifecycle Manager (Amazon DLM)を使用するとEBSのバックアップであるスナップショットの作成、保存、削除を自動化できます。 定時バックアップをスケジュールして貴重なデータを保護します。
      • CloudWatch
        • CloudWatchエージェントを動かし、ログをCloudWatch Logsに転送することで、EC2インスタンスのログ管理を実施することができます。

    Deployment

    • Elastic Beanstalk
      • 開発されたウェブアプリケーションとウェブサービスをデプロイし、自動的にデプロイメントの詳細 (容量のプロビジョニング、負荷分散、Auto Scaling、アプリケーションのヘルスモニタリングなど) を処理します。
      • アプリケーションを実行しているインフラストラクチャについて学習することなく、AWS クラウドでアプリケーションをすばやくデプロイし、管理できます。Elastic Beanstalk は、選択肢を狭めたり制御を制限したりすることなく、管理の複雑さを軽減します。アプリケーションをアップロードするだけで、Elastic Beanstalk が自動的に容量のプロビジョニング、負荷分散、拡張、およびアプリケーションの状態のモニタリングといった詳細を処理します。
    • OpsWorks
      • OpsworksはChef や Puppet のマネージド型インスタンスを利用できるようになる構成管理サービスです。Chef や Puppet は、コードを使用してサーバーの構成を自動化できるようにするためのオートメーションプラットフォームです。OpsWorks では、サーバーのパッチ適用、アップデート、バックアップが自動的に実行され、Chef サーバーが管理されます。OpsWorks を使用すると、独自の設定管理システムを運用したり、そのインフラストラクチャを管理したりする必要がなくなります。
    • Elastic Beanstalk vs OpsWorks
      • OpsWorksはインフラ管理をメインにした環境設定の仕組みです。したがって、サーバーのパッチ適用、アップデート、バックアップの自動化というユースケースからOpsWorksと特定することができます。一方でElastic BeanStalkはウェブアプリケーションの展開に利用する仕組みです。

aws lambda
34% 回復性の高いアーキテクチャを設計する
24% パフォーマンスに優れたアーキテクチャを定義する
26% セキュアなアプリケーションおよびアーキテクチャを規定する
10% コストに最適化アーキテクチャを設計する
6% オペレーショナルエクセレンスを備えたアーキテクチャを定義する

IAM是全球化的服务

新建用户没有任何的权限

疑問点
aws sample question
sample 1
sample 9

udemyAWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集(5回分325問)
1回分
q4
データ処理停止時のイベントトリガーにより、モバイルにメールが通知される。

关于immutable和mutable类型的比较

我刚开始是用String来把几个String连接起来的,

结果如下 ‘Runtime: 123 ms’ 这是源代码

1
2
3
4
5
6
7
8
9
10
public class Solution557 {
public String reverseWords(String s) {
String[] word = s.split(" ");
s = "";
for(int i = 0 ; i < word.length; i++) {
s += new StringBuilder(word[i]).reverse().toString() + " ";
}
return s.trim();
}
}

后来看了一下leetcode上面据说是最简洁的写法,对方用了StringBuilder,结果快了十倍以上

‘Runtime: 9 ms’

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Solution557 {
public String reverseWords(String s) {
String[] word = s.split(" ");
s = "";
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < word.length; i++) {
s += new StringBuilder(word[i]).reverse().toString() + " ";
sb.append(new StringBuilder(word[i]).reverse().toString() + " ");
}
return s.trim();
return sb.toString().trim();
}
}

我在网上找了找为什么会有这么大的差距,原来最大的差异是String是immutable(不可变)(BigInteger和BigDecimal也是不可变),而StringBuilder是mutable(可变的)。

那么什么是immuatable呢,immuatable类型说明当数据类型被定义并生成instance(实例)以后就无法改变了。

因为每个String1都是不可变的,这就是意味着这种写法相当于你每次执行String1 += String2的时候,你就要需要一个新的内存来保存String1。

StringBuilder是mutable,因此sb.append实在原来的内存的基础上来进行修改的,省去了重新申请内存的时间和空间的消耗。

参考

Effective Java Item 15: Minimise mutability

Why StringBuilder is much faster than String

关于死亡

这几天,家里忙着处理叔公的丧事,我感觉自己和他们家不是很亲,只要参加葬礼就好了。

当然,去的当天亲戚们没有给我好脸色看。

除去途中台湾牧师的一大通的基督教入教传销宣传之外,其实还是很顺利的。

最让我感到震惊的是,人可以就这么走了,当我看到叔公的遗体的时候,我发现他的好黄,不知道是死后处理变成这样的,还是死人都是这样的,我记得我爷爷死的时候好像也是如此。我从出生到现在,大致经历了三次葬礼,爷爷,二姨和叔公。我在幼儿园和小学的时候就已经连续经历了两次的死别,幼儿园之前经历了一次生离。所以我在很长的一段时间内有一种看穿人生的局外人的心态,让我久久不能原谅这个世界,不能原谅爷爷的不治身亡。很长一段时间对医生这个职业充满了怀疑,并且励志不变成医生这样的人,尽管我后来发现日本的医生很难考。

既然死亡无法避免,生活中有那么多的不平事,那么就让我尽我所能改变现状,不要让自己的孩子再经历与自己一样的苦难这才值得自己自豪。整日感慨社会的世态炎凉,并不能改变这个社会,反而会产生为什么要把自己生在这个世界上的荒谬结论。如果世界原本就是那么的完美,那么顺利,那么我们的人生又有什么好经历的呢?只是不断地奇迹,最后奇迹本身变得平常无味。甚至连存在本身都无法察觉了吧。

第二件让我感觉到惊讶的事情是,自己虽然学了中文和日语,但在此之前,自己是一个故乡的魂。和亲戚在一起让我产生了安全感,回到了故乡的感觉,心灵上的些许平静。这和台湾人在一起聊天时产生的共鸣很相似,不知道为什么和北方人还有内陆地区的人聊天产生不了这样的火花和感触。

java的类装载器

Java虚拟机要装载一个类时,通过以下方法来选择类装载器:

1.启动类加载器(Bootsrap ClassLoader)

Java虚拟机中内嵌了一个称为Bootstrap的类装载器,它是用于特定与操作系统的本地代码实现的,属于Java虚拟机的内核,这个Bootsrap类不需要专门的类装载器进行装载。Bootsrap类装载器负责加载Java核心包中的类(即rt.jar文件中的类),这些类的Class.getClassLoader方法返回值为null,即表示是bootstrap类装载器。

在C:\Program Files\Java\jdk1.7.0_51\jre\lib\rt.jar 文件内,我把rt.jar解压后看到它在java.lang下,这是java默认的一个包,不需要import就能够使用。

2.扩展类加载器(Extension ClassLoader)

位于sun.misc.Launcher$ExtClassLoader下。

3.应用程序类加载器(Application ClassLoader)

位于sun.misc.Launcher$AppClassLoader下。

其中,ExtClassLoader类装载器负责加载存放在/jre/lib/ext 目录下的Jar包中的类,AppClassLoader负责加载应用程序中的启动执行类,即当使用java 命令去启动执行一个类时,Java虚拟机使用AppClassLoader加载这个类。

在编译和运行Java程序时,都会通过ExtClassLoader类装载器去/jre/lib/ext 目录下的Jar包中搜索要加载的类。

假设将包含有Serlet API 的jar文件复制到该目录下,在便宜Servlet程序时,就不用再CLASSPATH环境变量中增加包含Serlet API的jar文件了。

http://docs.oracle.com/javase/8/docs/api/ 中的 java.lang$Class ClassLoader

就有详细的介绍

下面截取一段

A class loader is an object that is responsible for loading classes. The class ClassLoader is an abstract class. Given the binary name of a class, a class loader should attempt to locate or generate data that constitutes a definition for the class. A typical strategy is to transform the name into a file name and then read a “class file” of that name from a file system.

地址http://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html

大意就是loader 类是一个负责加载类的对象,ClassLoader是一个抽象类。给一个类二进制名,类加载器应尝试找到或者生成定义类的组成数据。一般是转换名字到文件名,然后从文件系统读入“类文件”名。

类加载器的双亲委派模型在JDK1.2期间被引入并广泛用运用于Java程序中,它是Java设计者推荐给开发者的一种类加载器实现方式,而不是强制性的。

关于阅读

丑媳妇终究是要见婆婆的,现在终于想要拿出自己的第一篇博客来了。

一本关于如何读书的文章。看书的目的有很多,我们很多人的目的可能比较现实一点,希望通过读书来改变自己的生活和工作状况,但书读的越多到后面就越会发现,读书其实只是一个手段,一个开端,他距离解决问题本身还差距很远。我就有过这样的经历,明明读了很多的书,为什么问题还是没有解决。其实书只能够给我们提供一个方法,但就达到解决问题而言还是差很远的。

学习英语或者是背课文的时候,我们往往会有这样的一个困惑,为什么我明明看到书上的词汇和句子都很熟悉,可是就是想不起来呢?词汇分为主动词汇被动词汇,如果你看到一个词认识它,可是你无法在需要的时候想起来并且运用它,甚至不知道该如何使用它,那么这个词语就是被动词汇。还有一个状况就是你即知道这个词语也知道它的各种意思和用法,然后还能灵活的用这个词语进行造句,那么就说明这个词语对你来说是主动词汇。

如果说读书是认知的过程,那么运用就是输出的过程。首先,你得先学会认识这个这个知识点,通过读书或者自身经历的手段,然后深入如何运用这个知识点,最好的办法是通过运用它。但思考并不那么简单。在解决问题的过程中,我们往往会忽略一个问题,为什么自己能够思考这个问题?并且得出答案?

你可以阅读波利亚的 《怎样解题》,还有《跳出盒子》,这是两本完全不一样的书。《怎样解题》通过启发式思考,让人一步步接近答案,而《跳出盒子》则让人从思考的前提出发,重新认识自己解决问题时的心理。当然你也可以看一看《你的灯亮了吗》 ,重新看待并且认识问题。

《怎样解题》最著名的莫过于她的《怎样解题》表了,我以第一人称的形式简单地介绍一下。(之所以用第一人称,因为我发现用”我”的称谓比用”你”更让人意识到是自己要做这件事情)

1.弄清问题:未知数是什么?已知数据是什么?条件是什么?条件充分与否?

画张图。引入适当的符号。把条件的各个部分分开。我能否写出它们?

2.拟定计划:我以前见过它吗?我是否讲过相同的问题而形式稍有不同?找出已知数与求知数之间的联系。如果找不出直接的联系,我可能不得不考虑辅助问题。我应该最终得出一个求解的计划。

3.实现计划:我能否清楚地看出这一步是否正确?能否证明这一步是正确的?

4.回顾反思:我能否检验这个论证?我能否用别的办法导出这个结果?我能否把这个结果或方法用于其它的问题?

我在把这些解题过程列出来的过程当中,我发现其实我完全已经想不起来我看过这个知识点了,只能尝试着认出它们而已,书中有大量的练习题,我只是阅读了这本书,而没有去实践和尝试着回忆起书中的内容,看似好像看完一本书就结束了,但实际上其实才刚刚开始。这也是为什么有些人看了很多书,却好像没有得到任何东西。因为没有做过读书笔记,没有对知识点进行整理的读书本身只是一种娱乐而已。(参考《万万没想到》——用强力研读书)

create-servlet-webpage

使用eclipse创建一个Dynamic Web Project,这次参考的是《深入体验Java Web开发内幕》这本书所以,名字就叫做 ExperienceDeeplyJavaWeb

然后修改project的properties下的Default output folder,其实就是java编译后的classes,说来奇怪,我的eclipse不显示classes…,创建后在同目录下重新创建会跳出已创建…

HelloServlet.java如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package Ch4;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
// 从HttpServlet类的帮助文档中复制service方法的声明部分可避免书写错误
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<font size=30 color=black>MarsForever</font><br>");
out.println("<marquee>" + new java.util.Date() + "</marquee>");
out.println("</html>");
}
}

然后在WebContent/WEB-INF下创建web.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>AnyName</servlet-name>
<servlet-class>Ch4.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>
AnyName
</servlet-name>
<url-pattern>
/demo/hello.html
</url-pattern>
</servlet-mapping>
</web-app>

然后运行tomcat,打开

http://localhost:8080/ExperienceDeeplyJavaWeb/demo/hello.html

会出现上面写的内容

要点

指定了类名(包括包),package.classname

下的可以指定任意的url地址。

但是要与下的一致,否则会出现以下的错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ExperienceDeeplyJavaWeb]]
at java.util.concurrent.FutureTask.report(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1122)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ExperienceDeeplyJavaWeb]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
... 6 more
Caused by: java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name AAnyName
at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3384)
at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3363)
at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1438)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1357)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:889)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:386)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5479)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 6 more

Sep 02, 2017 11:49:09 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at java.util.concurrent.FutureTask.report(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1122)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:739)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.startup.Catalina.start(Catalina.java:693)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1130)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 6 more

Sep 02, 2017 11:49:09 PM org.apache.catalina.startup.Catalina start
SEVERE: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.startup.Catalina.start(Catalina.java:693)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:739)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1130)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 11 more

其中

1
Caused by: java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name AAnyName

提示无法找到相对应的servlet name “AAnyName”

Read More