google compute engine 아래와 같이 2개 생성합니다.
ssh 접속하는 방법은 좋은 글이 많습니다.
링크 를 참고하여 생성한 인스턴스 두개 모두에 접속합니다.
swapoff -a
: kubelet 작동에 문제가 생길수 있다고 합니다. swap 기능을 disable 시키도록 합니다.
sudo apt-get update
sudo apt-get install -y docker docker.io apt-transport-https ca-certificates curl openssh-client openssh-server traceroute gnupg-agent software-properties-common python3-pip
sudo vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload
sudo systemctl restart docker
20.10.7
입니다. 문제가 생긴다면 해당 버전으로 재설치를 권장합니다. sudo apt-get update && sudo apt-get -y upgrade
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet=1.19.3-00 kubeadm=1.19.3-00 kubectl=1.19.3-00
sudo kubeadm init --apiserver-advertise-address <master node internal ip> --pod-network-cidr=10.244.0.0/16
--pod-network-cidr
의 경우 뒤에서 flannel을 사용하기때문에 권장값인 10.244.0.0/16
을 사용합니다. calico를 사용할 경우 192.168.0.0/16
를 사용하면 될듯합니다. mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
이후 아래 내용을 이어서 진행합니다.
sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
- --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
- --service-account-issuer=kubernetes.default.svc
- --feature-gates=TokenRequest=true
- --feature-gates=TokenRequestProjection=true
sudo kubeadm join <~~> --token <~~> --discovery-token-ca-cert-hash sha256: <~~>
kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
sudo systemctl restart kubelet
kubectl get nodes
를 입력하여 node가 Ready인지 확인합니다.kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
kubectl get pods -o wide
하면 ip 가 나오는데 워커노드에서
curl http://<ip>:8080
하면 k8s가 잘 설치되었는지 테스트 가능합니다.
wget https://github.com/kubeflow/kfctl/releases/download/v1.2.0/kfctl_v1.2.0-0-gbc038f9_linux.tar.gz
tar -xvf kfctl_v1.2.0-0-gbc038f9_linux.tar.gz
sudo mv kfctl /usr/local/bin/
export BASE_DIR=/opt/
export KF_NAME=choonsik
export KF_DIR=${BASE_DIR}/${KF_NAME}
export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.0.yaml"
mkdir $HOME/kf_installation_temp && cd $HOME/kf_installation_temp
kfctl apply -V -f $CONFIG_URI
Encountered error applying application cert-manager:
(kubeflow.error): Code 500 with message: Apply.Run :
error when creating "/tmp/kout144772096": Internal error
occurred: failed calling webhook "[webhook.cert-
manager.io](http://webhook.cert-manager.io/)": the server
is currently unable to handle the request
filename="kustomize/kustomize.go:284"
위와 비슷한 에러가 몇번 뜨다가 설치가 완료됩니다.
Failed to open db connection: DB open failed: Timeout waiting for DB conn successfully opened.
kubeflow pipeline no healthy upstream
kubeflow unable to contact profile controller
kubectl get pvc -n kubeflow
kubectl edit pvc katib-mysql -n kubeflow
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/pv1
kubelet Readiness probe failed: mysql: [Warning] Using a
password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user
'root'@'localhost' (using password: YES)
mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD'; RENAME USER 'root'@'localhost' to 'root'@'%'; create database if not exists katib;"
위 코드 같은 경우 password를 기존에 k8s secrets에 있는것으로 바꾸고 host를 percent symbol로 넣어서 접속을 다 허용해버렸지만 실 서비스라면 host를 허용할 때 '192.168.0.%' 이런식으로 잘 허용하는 것이 중요할 것 같습니다.