/ / kubernetes i debugowanie go w ogóle - mysql, amazon-web-services, docker, containers, kubernetes

kernernetes i debugowanie go w ogóle - mysql, amazon-web-services, docker, containers, kubernetes

Mam konfigurację klastra kubernetes w AWS. Używamy rejestru kontenerów EC2 do przechowywania naszych obrazów w doku. Mamy master / sługusy wszystkie ustawienia i wszystko wydaje się działać z klastrem.

Mój plik spec jest następujący:

apiVersion: v1
kind: Service
metadata:
name: apim-mysql
labels:
app: apim
spec:
ports:
# the port that this service should serve on
- port: 3306
selector:
app: apim
tier: mysql
clusterIP: None
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: apim-mysql
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: apim
tier: mysql
spec:
imagePullSecrets:
- name: myregistrykey
containers:
- name: mysql
image: <This points to our EC2 Container Registry and retreives the image>
resources:
requests:
cpu: 100m
memory: 100Mi
env:
- name: WSO2_ZIP_FILE
value: wso2am-1.10.1-SNAPSHOT.zip
- name: WSO2_VERSION
value: 1.10.1
- name: MYSQL_RANDOM_ROOT_PASSWORD
value: "yes"
- name: MYSQL_USER
value: username
- name: MYSQL_USER_PASSWD
value: password
- name: GET_HOSTS_FROM
value: dns
# If your cluster config does not include a dns service, then to
# instead access environment variables to find service host
# info, comment out the "value: dns" line above, and uncomment the
# line below.
#value: env
ports:
- containerPort: 3306
name: mysql

To, co robi ten kontener, to po prostu konfiguracja mysql. Będziemy potrzebować innych węzłów w klastrze, aby połączyć się z tym węzłem. Ponieważ będą musieli użyć mysql DB.

Domyślam się, że moje pierwsze pytanie brzmi: czy wszystko wygląda dobrze z tym plikiem specyfikacji? Czy ktoś widzi coś nie tak?

Wykonuję polecenie kubectl create i działa ono pomyślnie:

kubectl create -f mysql.yaml
service "apim-mysql" created
deployment "apim-mysql" created

kubectl get pods pokazuje działający strąk:

apim-mysql-545962574-w2qz1        1/1       Running            1          8m

Czasami podczas robienia dzienników programu Kubectl pojawia się komunikat o błędzie:

kubectl logs apim-mysql-545962574-w2qz1
Error from server: dial unix /var/run/docker.sock: no such file or directory

Ale w końcu wystarczająco szybko przejdzie przez to ... jeśli ktokolwiek ma informacje o tym, dlaczego tak się stanie, byłoby wspaniale.

Kiedy to działa, uzyskaj coś takiego:

kubectl logs apim-mysql-545962574-w2qz1
Initializing database
2016-07-13T15:51:47.375052Z 0 [Warning] InnoDB: New log files created, LSN=45790
2016-07-13T15:51:52.029915Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2016-07-13T15:51:53.531183Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: b837bd45-4911-11e6-99ba-02420af40208.
2016-07-13T15:51:53.746173Z 0 [Warning] Gtid table is not ready to be used. Table "mysql.gtid_executed" cannot be opened.
2016-07-13T15:51:53.746621Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2016-07-13T15:52:19.891437Z 1 [Warning] "user" entry "root@localhost" ignored in --skip-name-resolve mode.
2016-07-13T15:52:19.891705Z 1 [Warning] "user" entry "mysql.sys@localhost" ignored in --skip-name-resolve mode.
2016-07-13T15:52:19.891733Z 1 [Warning] "db" entry "sys mysql.sys@localhost" ignored in --skip-name-resolve mode.
2016-07-13T15:52:19.891778Z 1 [Warning] "proxies_priv" entry "@ root@localhost" ignored in --skip-name-resolve mode.
2016-07-13T15:52:19.891831Z 1 [Warning] "tables_priv" entry "sys_config mysql.sys@localhost" ignored in --skip-name-resolve mode.
Database initialized
MySQL init process in progress...
2016-07-13T15:52:34.632188Z 0 [Note] mysqld (mysqld 5.7.13) starting as process 49 ...
2016-07-13T15:52:49.814764Z 0 [Note] InnoDB: PUNCH HOLE support available
2016-07-13T15:52:49.814846Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-07-13T15:52:49.814859Z 0 [Note] InnoDB: Uses event mutexes
2016-07-13T15:52:49.814870Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2016-07-13T15:52:49.814928Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-07-13T15:52:49.814932Z 0 [Note] InnoDB: Using Linux native AIO
2016-07-13T15:52:50.243657Z 0 [Note] InnoDB: Number of pools: 1
2016-07-13T15:52:52.175079Z 0 [Note] InnoDB: Using CPU crc32 instructions
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...

Po pewnym czasie wydaje się, że podajnik ponownie się uruchamia i powie ponownie "Inicjowanie bazy danych".

Kilka dni temu, kiedy uruchomiłem Kubectl, loguje gozwróci wszystko od razu i będzie bardzo szybki, teraz jest bardzo powolny i nie pokazuje niczego, co naprawdę nie zmieniło mojego pliku specyfikacji, więc nie mam pojęcia, co się dzieje. Dla mnie wygląda na to, że kontener nie jest " t jest wykonywane poprawnie, gdy faktycznie pokazuje niektóre logi ... ale nie jestem pewien.

Jeśli ktoś ma jakąkolwiek wskazówkę, jak to debugować za pomocą niektórych komend, które mogę uruchomić, byłoby to bardzo cenne. Jestem bardzo utknięty w tym momencie i mam google tak dużo, ale bez powodzenia.

dzięki!

Odpowiedzi:

1 dla odpowiedzi № 1

Moje doświadczenie w korzystaniu z kubernetes na aws przy nieprzydatnych błędach

Error from server: dial unix /var/run/docker.sock: no such file or directory

został rozwiązany przez wybieranie bardziej mocnego typu instancji klasy aws ... tutaj są istotne env vars

export MASTER_SIZE=t2.medium
export NODE_SIZE=t2.medium
export NUM_NODES=2   #  if not defined aws will auto guess

... usuń także wzmiankę o ograniczeniach zasobów pod tagiem resources aż po uruchomieniu OK

Następujące polecenia są niezbędne ... po prostu przestań wspominać o przestrzeni nazw, jeśli jej nie używasz

kubectl opisuje svc --namespace = xxx

kubectl get pods --namespace = xxx

kubectl opisuje pods --namespace = xxx

Kubectl opisuje węzły

Również miła jest możliwość wykonania edycji na żywo wdrożenia ... najpierw zobacz problem z wdrożeniami

kubectl get deployments  --namespace=ruptureofthemundaneplane

... wyjście

NAME                   DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
loudspeed-deployment   1         1         1            1           1h
mongo-deployment       1         1         1            1           1h

więc teraz znamy nazwę wdrożenia, aby zrobić edycję na żywo

kubectl edit deployment/mongo-deployment

która otworzy sesję edycji w twoim terminalu przy użyciu domyślnego edytora, gdzie możesz dowolnie zmieniać ustawienia

Znajduję się przy rozwiązywaniu problemów z wdrożeniem bazy danych, który jest przydatny do uruchamiania obrazu za pomocą poniższego pliku Dockerfile ... to pozwala zalogować się przy użyciu exec zgodnie z

kubectl exec -ti $(kubectl get pods --namespace=${PROJECT_ID}|grep ${GKE_NODEDEPLOYMENT}|cut -d" " -f1) --namespace=${PROJECT_ID} -c ${GKE_NGINX} -- bash

gdzie możesz zrobić interaktywną bazę danychsesja logowania (po zainstalowaniu potrzebnego kodu klienta lub umieszczeniu go poniżej w pliku Dockerfile) ... tutaj jest odpowiedni plik Dockerfile dla tego kontenera wdrażania problemów

FROM ubuntu:16.04

ENV TERM linux
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update
RUN apt-get install -y wget  curl

COPY .bashrc /root/

# ENTRYPOINT ["/bin/bash"]
CMD ["/bin/bash"]


#
# docker build --tag stens_ubuntu .
#
# docker run -d  stens_ubuntu  sleep infinity
#
# docker ps
#
#
# ... find CONTAINER ID from above and put into something like this
#
# docker exec -ti 3cea1993ed28 bash
#
#