Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .DS_Store
Binary file not shown.
51 changes: 50 additions & 1 deletion 1.1/1.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,16 +62,65 @@
### Задание 1. Установка MicroK8S

1. Установить MicroK8S на локальную машину или на удалённую виртуальную машину.
2. Установить dashboard.
2. [Установить dashboard.](https://microk8s.io/docs/addon-dashboard)


```bash
microk8s enable dashboard
```

3. Сгенерировать сертификат для подключения к внешнему ip-адресу.

Добавляем в файл **/var/snap/microk8s/current/certs/csr.conf.template** внешний IP-адрес **192.168.1.13:**
```bash
"/var/snap/microk8s/current/certs/csr.conf.template"
...
[ alt_names ]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster
DNS.5 = kubernetes.default.svc.cluster.local
IP.1 = 127.0.0.1
IP.2 = 10.152.183.1
IP.4 = 192.168.1.13
...
```
Генерируем новый сертификат для подключения:
```bash
sudo microk8s refresh-certs --cert front-proxy-client.crt
```
------

### Задание 2. Установка и настройка локального kubectl
1. Установить на локальную машину kubectl.
2. Настроить локально подключение к кластеру.

```bash
ad@ads-iMac .kube % kubectl get nodes
NAME STATUS ROLES AGE VERSION
ubuntu2004 Ready <none> 168m v1.28.3
```

![kuberctl get nodes](./assets/getnodes.png)

3. Подключиться к дашборду с помощью port-forward.

Создать токен:
```bash
microk8s kubectl create token default
```
Настроить port-forward:

```bash
ols@ubuntu2004:~$ microk8s kubectl port-forward -n kube-system service/kubernetes-dashboard 10443:443
Forwarding from 127.0.0.1:10443 -> 8443
Forwarding from [::1]:10443 -> 8443
...
```

![Dashboard](./assets/dashboard.png)

------

### Правила приёма работы
Expand Down
Binary file added 1.1/assets/dashboard.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 1.1/assets/getnodes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
97 changes: 96 additions & 1 deletion 1.2/1.2.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

### Цель задания

В тестовой среде для работы с Kubernetes, установленной в предыдущем ДЗ, необходимо развернуть Pod с приложением и подключиться к нему со своего локального компьютера.
В тестовой среде для работы с Kubernetes, установленной в предыдущем ДЗ, необходимо развернуть Pod с приложением и подключиться к нему со своего локального компьютера.

------

Expand All @@ -24,20 +24,114 @@
### Задание 1. Создать Pod с именем hello-world

1. Создать манифест (yaml-конфигурацию) Pod.

[Манифест](./pod_helloworld.yml)
2. Использовать image - gcr.io/kubernetes-e2e-test-images/echoserver:2.2.
3. Подключиться локально к Pod с помощью `kubectl port-forward` и вывести значение (curl или в браузере).

```bash
ad@ads-iMac 1.2 % microk8s kubectl apply -f pod_helloworld.yml
pod/hello-world created
ad@ads-iMac 1.2 % microk8s kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-world 1/1 Running 0 10s
ad@ads-iMac 1.2 % microk8s kubectl port-forward hello-world 12345:8080
Forwarding from 127.0.0.1:12345 -> 8080
Forwarding from [::1]:12345 -> 8080
Handling connection for 12345
```

```bash
ad@ads-iMac ~ % curl 127.0.0.1:12345


Hostname: hello-world

Pod Information:
-no pod information available-

Server values:
server_version=nginx: 1.12.2 - lua: 10010

Request Information:
client_address=127.0.0.1
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
request_uri=http://127.0.0.1:8080/

Request Headers:
accept=*/*
host=127.0.0.1:12345
user-agent=curl/8.4.0

Request Body:
-no body in request-
```

![Ответ pod'a в браузере](./assets/pod%20hello-world.png)
------

### Задание 2. Создать Service и подключить его к Pod

1. Создать Pod с именем netology-web.
2. Использовать image — gcr.io/kubernetes-e2e-test-images/echoserver:2.2.
3. Создать Service с именем netology-svc и подключить к netology-web.

```bash
ad@ads-iMac 1.2 % microk8s kubectl apply -f netology-web.yml
pod/netology-web created
ad@ads-iMac 1.2 % microk8s kubectl apply -f netology-svc.yml
service/netology-svc created
ad@ads-iMac 1.2 % microk8s kubectl port-forward service/netology-svc 8080:80
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
Handling connection for 8080
Handling connection for 8080

```

4. Подключиться локально к Service с помощью `kubectl port-forward` и вывести значение (curl или в браузере).

```ad@ads-iMac ~ % curl 127.0.0.1:8080


Hostname: netology-web

Pod Information:
-no pod information available-

Server values:
server_version=nginx: 1.12.2 - lua: 10010

Request Information:
client_address=127.0.0.1
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
request_uri=http://127.0.0.1:8080/

Request Headers:
accept=*/*
host=127.0.0.1:8080
user-agent=curl/8.4.0

Request Body:
-no body in request-
```

![Браузер](./assets/service%20netology-web.png)
------


Результат kubectl get pods

![kubectl get pods](./assets/kubectl%20get%20pods.png)

### Правила приёма работы

1. Домашняя работа оформляется в своем Git-репозитории в файле README.md. Выполненное домашнее задание пришлите ссылкой на .md-файл в вашем репозитории.
Expand All @@ -47,6 +141,7 @@
------

### Критерии оценки

Зачёт — выполнены все задания, ответы даны в развернутой форме, приложены соответствующие скриншоты и файлы проекта, в выполненных заданиях нет противоречий и нарушения логики.

На доработку — задание выполнено частично или не выполнено, в логике выполнения заданий есть противоречия, существенные недостатки.
Binary file added 1.2/assets/kubectl get pods.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 1.2/assets/pod hello-world.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 1.2/assets/service netology-web.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions 1.2/netology-svc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: netology-svc
spec:
ports:
- protocol: TCP
port: 80
targetPort: 8080
selector:
app: netology-label
12 changes: 12 additions & 0 deletions 1.2/netology-web.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: v1
kind: Pod
metadata:
name: netology-web
labels:
app: netology-label
spec:
containers:
- name: netology-web
image: gcr.io/kubernetes-e2e-test-images/echoserver:2.2
ports:
- containerPort: 8080
10 changes: 10 additions & 0 deletions 1.2/pod_helloworld.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
- name: hello-world
image: gcr.io/kubernetes-e2e-test-images/echoserver:2.2
ports:
- containerPort: 12345
130 changes: 129 additions & 1 deletion 1.3/1.3.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

### Инструменты и дополнительные материалы, которые пригодятся для выполнения задания

1. [Описание](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) Deployment и примеры манифестов.
1. [Описание](https://kubernetes.iog/docs/concepts/workloads/controllers/deployment/) Deployment и примеры манифестов.
2. [Описание](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) Init-контейнеров.
3. [Описание](https://github.com/wbitt/Network-MultiTool) Multitool.

Expand All @@ -25,20 +25,148 @@
### Задание 1. Создать Deployment и обеспечить доступ к репликам приложения из другого Pod

1. Создать Deployment приложения, состоящего из двух контейнеров — nginx и multitool. Решить возникшую ошибку.

[deployment-nginx-multitool](./deployment-nginx-multitool.yml)

```bash
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ microk8s kubectl apply -f deployment-nginx-multitool.yml
deployment.apps/nginx-multitool created
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ microk8s kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-multitool-ddfc7678b-zzk48 0/2 ContainerCreating 0 15s
```

2. После запуска увеличить количество реплик работающего приложения до 2.
3. Продемонстрировать количество подов до и после масштабирования.

```bash
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ microk8s kubectl apply -f deployment-nginx-multitool.yml
deployment.apps/nginx-multitool configured
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ microk8s kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-multitool-ddfc7678b-zzk48 2/2 Running 0 39s
nginx-multitool-ddfc7678b-987bl 0/2 ContainerCreating 0 3s
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$
```

4. Создать Service, который обеспечит доступ до реплик приложений из п.1.

[service-nginx-multitool](./service-nginx-multitool.yml)

```bash
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ microk8s kubectl apply -f service-nginx-multitool.yml
service/nginx-multitool-service created
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ microk8s kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 10d
nginx-multitool-service ClusterIP 10.152.183.94 <none> 80/TCP 12s
```

5. Создать отдельный Pod с приложением multitool и убедиться с помощью `curl`, что из пода есть доступ до приложений из п.1.

[multitool-pod](./multitool-pod.yml)

---
***NOTE***

```
kubectl exec my-pod -- ls / # Выполнить команду в существующем поде (в случае одного контейнера).
```

---

```bash
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ microk8s kubectl apply -f multitool-pod.yml
pod/multitool created
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ kubectl exec -it multitool curl nginx-multitool-service
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
```

------

### Задание 2. Создать Deployment и обеспечить старт основного контейнера при выполнении условий

1. Создать Deployment приложения nginx и обеспечить старт контейнера только после того, как будет запущен сервис этого приложения.

[nginx-deploy](./nginx-deploy.yml)

2. Убедиться, что nginx не стартует. В качестве Init-контейнера взять busybox.

```bash
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-7fff984987-5fm9b 0/1 Init:0/1 1 4m44s

ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ kubectl logs nginx-7fff984987-5fm9b
Defaulted container "nginx" out of: nginx, init-myservice (init)
Error from server (BadRequest): container "nginx" in pod "nginx-7fff984987-5fm9b" is waiting to start: PodInitializing
```

3. Создать и запустить Service. Убедиться, что Init запустился.

[nginx-service](./nginx-service.yml)

4. Продемонстрировать состояние пода до и после запуска сервиса.

```bash
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ microk8s kubectl apply -f nginx-service.yml
service/nginx-service created
ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-7fff984987-5fm9b 0/1 Init:0/1 1 7m46s

ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-7fff984987-5fm9b 1/1 Running 0 7m51s

ols@ubuntults:~/homeworks/kuber-homeworks/1.3$ kubectl logs nginx-7fff984987-5fm9b
Defaulted container "nginx" out of: nginx, init-myservice (init)
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2024/02/24 10:51:44 [notice] 1#1: using the "epoll" event method
2024/02/24 10:51:44 [notice] 1#1: nginx/1.25.4
2024/02/24 10:51:44 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14)
2024/02/24 10:51:44 [notice] 1#1: OS: Linux 6.5.0-21-generic
2024/02/24 10:51:44 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 65536:65536
2024/02/24 10:51:44 [notice] 1#1: start worker processes
2024/02/24 10:51:44 [notice] 1#1: start worker process 29
2024/02/24 10:51:44 [notice] 1#1: start worker process 30
2024/02/24 10:51:44 [notice] 1#1: start worker process 31
2024/02/24 10:51:44 [notice] 1#1: start worker process 32
```

------

### Правила приема работы
Expand Down
Loading