自己搭建了一个K8S的集群,用kubeadm。参照官网安装完成之后,要先运行以下命令禁止swap分区

sudo swapoff -a
sudo free -m

然后运行kubeadm init启动,这里会遇到无法拉取k8s.gcr.io的镜像的问题,我的解决办法是用阿里云来拉取镜像,具体可以见我以前的博客,利用阿里云来加速Kubeflow的安装_gzroy的博客-CSDN博客

之后就可以运行命令来启动集群了,这里我指定了版本,因为我之前拉取的镜像都是这个版本的:

sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version 1.20.5 --image-repository registry.aliyuncs.com/google_containers
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

安装Calico

kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml
kubectl create -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml

测试一下运行一个应用,这里我用Quarkus写了一个简单的helloworld,实现了访问本地9090端口的/hello路径,回复一个hello message. 把应用打包之后push到本地的镜像中。

因为我的k8s集群只有一个主节点,默认是不能在主节点调度应用的,需要运行以下命令:

kubectl taint nodes --all node-role.kubernetes.io/master-

然后创建一个deployment.yaml文件,描述要创建一个replicaset的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: quarkus-test
spec:
  selector:
    matchLabels:
      app: quarkus-test-app
  replicas: 2
  template:
    metadata:
      labels:
        app: quarkus-test-app
    spec:
      containers:
        - name: quarkus-test
          image: cn.roygao/quarkus_test:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 9090
              protocol: TCP

执行命令kubectl apply -f deployment.yaml,之后调用kubectl get pods -A即可看到新创建的两个quarkus-test的pod运行。如果我们删除某一个pod,可以看到k8s会自动新生成一个pod,始终维持2个pod运行。

执行以下命令创建一个NodePort service,使得外部可以通过节点的端口访问我们的应用

kubectl expose deployment quarkus-test --type=NodePort --name=quarkus-test-service

调用kubectl describe svc quarkus-test-service可以查看NodePort,之后我们就可以通过访问节点的外部IP加上NodePort来访问应用了。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐