Kubernetes 1.单机安装并应用

369 阅读2分钟

单机安装新版Kubernetes,并且应用docker。

安装步骤

  1. 初始化

    systemctl stop firewalld
    systemctl disable firewalld
    
    sed -i 's/enforcing/disabled/' /etc/selinux/config
    setenforce 0 
    
    swapoff -a
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    
    cat >> /etc/hosts << EOF
    192.168.200.182 master
    EOF
    
    cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    
    sysctl --system
    
    yum install -y ntpdate
    ntpdate time.windows.com
    
    shutdown -r now
    
  2. 添加基础软件

    • 添加阿里云

      cat > /etc/yum.repos.d/kubernetes.repo << EOF
      [kubernetes]
      name=Kubernetes
      baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
      enabled=1
      gpgcheck=0
      repo_gpgcheck=0
      gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
      EOF
      
    • 安装docker,如果安装过了,可以跳过

      curl -s https://get.docker.com/ | sh
      
      mkdir /etc/docker
      sudo tee /etc/docker/daemon.json <<-'EOF'
      {
        "exec-opts": ["native.cgroupdriver=systemd"]
      }
      EOF
      
      systemctl enable docker
      systemctl start docker
      
    • 安装cri-docker

      # 如果下得慢可以到github上先下好
      wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4-3.el7.x86_64.rpm
      rpm -ivh cri-dockerd-0.3.4-3.el7.x86_64.rpm
      
      vim /usr/lib/systemd/system/cri-docker.service
      ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd://
      
      systemctl start cri-docker
      systemctl enable cri-docker
      
  3. 安装kubernetes

    yum install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2
    
    vim /etc/sysconfig/kubelet
    KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
    systemctl enable kubelet
    
  4. 初始化kubernetes

    # 准备所需要的镜像
    kubeadm config images list --kubernetes-version=v1.28.2
    # 从阿里云拉取镜像
    kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock
    
    kubeadm init --apiserver-advertise-address=192.168.200.182 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.28.2  --service-cidr=10.96.0.0/12  --pod-network-cidr=10.244.0.0/16 --cri-socket=unix:///var/run/cri-dockerd.sock
    
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  5. 部署网络插件

    # 下载网络插件
    wget https://docs.projectcalico.org/v3.18/manifests/calico.yaml
    
    # 修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 --pod-network-cidr指定的一样。
    - name: CALICO_IPV4POOL_CIDR
      value: "10.244.0.0/16"
    
    # 将 docker.io 替换
    sed -i 's#docker.io/##g' calico.yaml
    
    kubectl apply -f calico.yaml
    
  6. 如果以后想要将节点接入到master

    kubeadm token create --print-join-command
    

注意最重要的部分

# 1. 先检查节点名称
[root@juejin kubernetes]# kubectl get nodes
NAME     STATUS   ROLES           AGE    VERSION
juejin   Ready    control-plane   4m4s   v1.28.2

# 2. 检查该节点污点
[root@juejin kubernetes]# kubectl describe node juejin|grep Taint
Taints:             node-role.kubernetes.io/control-plane:NoSchedule

# 3. 去除该节点的污点
[root@juejin kubernetes]# kubectl taint node juejin node-role.kubernetes.io/control-plane-
node/juejin untainted

# 4. 再次检查污点
[root@juejin kubernetes]# kubectl describe node juejin|grep Taint
Taints:             <none>

# 5. 查看 pod 状态, 会发现 STATUS 都变为 Running
kubectl get pod -A

# 接下来就可以单机玩kubernetes了

验证

# 创建部署
kubectl create deployment nginx --image=nginx:1.7.9
# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看pod以及服务信息
kubectl get pod,svc

[root@juejin kubernetes]# kubectl get pod,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-54bbf55b54-dl9p8   1/1     Running   0          46s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        7m37s
service/nginx        NodePort    10.110.120.18   <none>        80:32374/TCP   38s
[root@juejin kubernetes]# curl 192.168.200.182:32374
# 32374 为service/nginx的暴露端口