Karmada Installation with Helm
Kubernetes 1.20+
Helm 3.2.0+
helm repo add karmada-charts https://raw.githubusercontent.com/karmada-io/karmada/master/charts
helm repo update karmada-charts
helm upgrade --install karmada karmada-charts/karmada \
--kubeconfig=$HOME /.kube/config \
--create-namespace \
--namespace karmada-system \
--set karmadaImageVersion=1.8.0 \
--set apiServer.hostNetwork=false \
--set apiServer.serviceType=NodePort \
--set apiServer.nodePort=32443 \
--set certs.auto.hosts[0]=" kubernetes.default.svc" \
--set certs.auto.hosts[1]=" *.etcd.karmada-system.svc.cluster.local" \
--set certs.auto.hosts[2]=" *.karmada-system.svc.cluster.local" \
--set certs.auto.hosts[3]=" *.karmada-system.svc" \
--set certs.auto.hosts[4]=" localhost" \
--set certs.auto.hosts[5]=" 127.0.0.1" \
--set certs.auto.hosts[6]=" 192.168.0.140" \
--set certs.auto.hosts[7]=" 100.64.0.1" \
--set certs.auto.hosts[8]=" 100.64.0.*"
kubectl get secret --kubeconfig=$HOME /.kube/config -n karmada-system karmada-kubeconfig -o jsonpath={.data.kubeconfig} | base64 -d > $HOME /.kube/karmada-config
internal_ip=" $( hostname -I | awk {' print $1' }) "
sed -i " 6s/.*/ server: https:\/\/${internal_ip} :32443/g" $HOME /.kube/karmada-config
kubectl get clusters,deployments --kubeconfig=$HOME /.kube/karmada-config
Install Agent (in Member Cluster)
Karmada Host 에 설치하지 않기
설명
base64 decoding
caCrt
is karmada kubeconfig certificate-authority-data
crt
is karmada kubeconfig client-certificate-data
key
is karmada kubeconfig client-key-data
serverIp
is karmada Node Ip Address:32443
echo $( grep certificate-authority-data $HOME /.kube/karmada-config | awk ' {print $2}' | base64 -d)
echo $( grep client-certificate-data $HOME /.kube/karmada-config | awk ' {print $2}' | base64 -d)
echo $( grep client-key-data $HOME /.kube/karmada-config | awk ' {print $2}' | base64 -d)
helm repo add karmada-charts https://raw.githubusercontent.com/karmada-io/karmada/master/charts
helm repo update karmada-charts
_hostname=$( hostname | tr ' _' ' -' )
_cacrt=$( grep certificate-authority-data $HOME /.kube/karmada-config | awk ' {print $2}' | base64 -d)
_crt=$( grep client-certificate-data $HOME /.kube/karmada-config | awk ' {print $2}' | base64 -d)
_key=$( grep client-key-data $HOME /.kube/karmada-config | awk ' {print $2}' | base64 -d)
helm upgrade --install karmada karmada-charts/karmada \
--kubeconfig=$HOME /.kube/kubernetes-01-config \
--create-namespace \
--namespace karmada-system \
--set karmadaImageVersion=1.8.0 \
--set installMode=agent \
--set agent.clusterName=" $_hostname " \
--set agent.kubeconfig.caCrt=" $_cacrt " \
--set agent.kubeconfig.crt=" $_crt " \
--set agent.kubeconfig.key=" $_key " \
--set agent.kubeconfig.server=https://100.64.0.1:32443
Karmada Deploy & Propagation
root@karmada:~ # kubectl get clusters --kubeconfig=$HOME/.kube/karmada-config
NAME VERSION MODE READY AGE
kubernetes-01 v1.25.16 Pull True 4m54s
kubernetes-02 v1.25.16 Pull True 49s
kubernetes-03 v1.25.16 Pull True 45s
cat << 'EOF ' > nginx-deployment-service.yaml
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 10
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx
EOF
cat << 'EOF ' > nginx-propagation.yaml
# nginx-propagation.yaml
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: nginx-propagation
namespace: default
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
namespace: default
- apiVersion: apps/v1
kind: Service
name: nginx-svc
namespace: default
placement:
clusterAffinity:
clusterNames:
- kubernetes-01
- kubernetes-02
- kubernetes-03
replicaScheduling:
replicaDivisionPreference: Weighted
replicaSchedulingType: Divided
weightPreference:
staticWeightList:
- targetCluster:
clusterNames:
- kubernetes-01
weight: 2
- targetCluster:
clusterNames:
- kubernetes-02
weight: 3
- targetCluster:
clusterNames:
- kubernetes-03
weight: 1
EOF
kubectl apply -f nginx-deployment-service.yaml --kubeconfig $HOME /.kube/karmada-config
kubectl apply -f nginx-propagation.yaml --kubeconfig $HOME /.kube/karmada-config
helm upgrade --install karmada karmada-charts/karmada \
--create-namespace \
--namespace karmada-system \
--dependency-update \
--set components={" descheduler" }
helm uninstall karmada -n karmada-system
kubectl delete sa/karmada-pre-job -n karmada-system
kubectl delete clusterRole/karmada-pre-job
kubectl delete clusterRoleBinding/karmada-pre-job
kubectl delete ns karmada-system
rm -rf /var/lib/karmada* /etc/karmada*