Kubeadm部署k8s单点master

2022-12-01,,,,

Kubeadm部署k8s单点master

1、环境准备:

主机名 IP 说明 宿主机系统
master 10.0.0.17 Kubernetes集群的master节点 CentOS 7.9
node1 10.0.0.27 Kubernetes集群的node节点 CentOS 7.9
 # 所有master和node节点执行:
 ​
 # 关闭防火墙、iptables和selinux
 systemctl stop firewalld && systemctl disable firewalld
 setenforce 0
 sed -i 's/enforcing/disabled/' /etc/selinux/config
 ​
 # 禁用swap
 vim /etc/fstab
 swapoff -a
 ​
 # 主机名互相解析
 hostnamectl set-hostname master
 vim /etc/hosts
 10.0.0.27 node
 10.0.0.17 master
 ​
 # 时间同步
 yum install -y chrony
 systemctl enable --now chronyd
 ​
 # 添加网桥过滤和地址转发功能
 yum install -y bridge-utils
 modprobe br_netfilter
 cat > /etc/sysctl.d/kubernetes.conf <<EOF
 net.bridge.bridge-nf-call-arptables = 1
 net.bridge.bridge-nf-call-ip6tables = 1
 net.ipv4.ip_forward = 1
 user.max_user_namespaces=28633
 EOF
 sysctl -p /etc/sysctl.d/kubernetes.conf
 ​

2、安装docker

 # 所有节点执行:
 yum install -y yum-utils device-mapper-persistent-data lvm2
 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 yum install docker-ce
 ​
 # 配置镜像加速器、使用 systemd 来管理容器的 cgroup
 mkdir -p /etc/docker
 cat <<EOF > /etc/docker/daemon.json
 {
     "exec-opts": ["native.cgroupdriver=systemd"],
     "log-driver": "json-file",
     "log-opts": {
         "max-size": "100m"
    },
     "storage-driver": "overlay2",
     "storage-opts": [
         "overlay2.override_kernel_check=true"
    ],
     "experimental": false,
     "debug": false,
     "max-concurrent-downloads": 10,
     "registry-mirrors": ["https://pgavrk5n.mirror.aliyuncs.com"]
 }
 EOF
 systemctl enable docker && systemctl start docker && systemctl status docker

3、切换k8s国内源

 # 所有节点执行:
 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
 yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0    

4、安装指定版本kubeadm、kubelet、kubectl

 # 所有节点执行:
 # 建议不要安装最新版本,因为最新版本很多组件不兼容,造成安装报错。
 yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
 ​
 # 设置kubelet开机启动
 systemctl enable kubelet

5、初始化K8S

 # master节点:
 kubeadm init   --apiserver-advertise-address=10.0.0.17   --image-repository registry.aliyuncs.com/google_containers   --kubernetes-version v1.23.0   --service-cidr=10.96.0.0/12   --pod-network-cidr=10.244.0.0/16   --ignore-preflight-errors=all
 ​
 # 说明:
 –apiserver-advertise-address #集群通告地址(master机器IP)
 –image-repository   #由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
 –kubernetes-version            #K8s版本,与上面安装的一致
 –service-cidr                       #集群内部虚拟网络,Pod统一访问入口
 –pod-network-cidr                   #Pod网络,与下面部署的CNI网络组件yaml中保持一致

 # master节点执行:
 ​
 # 创建必要文件
   mkdir -p $HOME/.kube
   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
   sudo chown $(id -u):$(id -g) $HOME/.kube/config
 ​

6、node节点加入集群

 # 所有node节点执行:
 ​
 # 执行初始化生成的join 命令:
 kubeadm join 10.0.0.17:6443 --token fnpbrc.e5s4jqrx8na4cpo9 \
  --discovery-token-ca-cert-hash sha256:5ecaba93c59504941137c963584e81643c6b50ecda6c2c1f4a4f60ca8cd9a7a0
 ​
 # 提示"kubectl get nodes",表示加入集群成功,可在master节点使用此命令查看node信息
 ​
 # 如果忘记或者token过期(默认有效期24小时)需要执行以下命令:
 kubeadm token create --print-join-command

7、部署网络

 # master节点执行:
 ​
 # 下载calico YAML文件
 wget https://docs.projectcalico.org/manifests/calico.yaml
 ​
 #修改Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的–pod-network-cidr指定的一样(大概4551行左右)
 vim calico.yaml
 ......
 # no effect. This should fall within `--cluster-cidr`.
  - name: CALICO_IPV4POOL_CIDR            #取消注释
    value: "10.244.0.0/16"                #取消注释,修改为初始化–pod-network-cidr指定的地址
 # Disable file logging so `kubectl logs` works.
 ......
 ​
 ​
 kubectl apply -f calico.yaml
 ​
 # 稍等片刻,查看节点状态:
 [root@master ~]# kubectl get nodes
 NAME     STATUS   ROLES                 AGE   VERSION
 master   Ready   control-plane,master   49m   v1.23.0
 node     Ready   <none>                 14m   v1.23.0
 ​
 # 查看通信状态
 kubectl get pods -n kube-system

8、部署nginx测试

 #创建一个yaml文件
 ​
 [root@master ~]# vim nginx.yml
 apiVersion: apps/v1
 kind: Deployment
 metadata:
  name: nginx-deployment
  labels:
    app: nginx
    rel: stable
 spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
      rel: stable
  template:
    metadata:
      labels:
        app: nginx
        rel: stable
    spec:
      containers:
       - name: nginx
        image: nginx
         
 [root@master ~]# kubectl apply -f nginx.yml
 #再创建一个yaml文件:
 ​
 [root@master ~]# vim nginx-service.yml
 apiVersion: v1
 kind: Service
 metadata:
  name: nginx-service
 spec:
  selector:
    app: nginx
  type: NodePort
  ports:
     - protocol: TCP
      port: 80
      targetPort: 80
 ​
 [root@master ~]# kubectl apply -f nginx-service.yml
 #查看服务 (Running说明启动成功)
 [root@master ~]# kubectl get pod,svc
 NAME                                   READY   STATUS   RESTARTS   AGE
 pod/nginx-deployment-749d94b5db-64lm7   1/1     Running   0         8m20s
 pod/nginx-deployment-749d94b5db-j522z   1/1     Running   0         8m20s
 pod/nginx-deployment-749d94b5db-jjwjr   1/1     Running   0         8m20s
 ​
 NAME                   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)       AGE
 service/kubernetes     ClusterIP   10.96.0.1     <none>        443/TCP       63m
 service/nginx-service   NodePort    10.98.54.199   <none>        80:32378/TCP   4m35s
 ​
 # 浏览器打开10.0.0.17:32378就可以看到nginx页面了(端口32378是上边命令查询出来的)

Kubeadm部署k8s单点master的相关教程结束。

《Kubeadm部署k8s单点master.doc》

下载本文的Word格式文档,以方便收藏与打印。