环境

1:购买腾讯云 2U 4g配置服务器 两台
  一个master 和一个node 
关闭swap : swapoff -a 
 free -m 查看 swap 为 0 ,永久生效要 注释掉 /etc/fstab 文件中的 swap配置 

2:安装 xshell 方便操作

kubeadm 安装集群

安装containerd(master 和 node)

  官方链接: https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhY2Nlc3NfcmVzb3VyY2UiLCJleHAiOjE2NTMwNTY4MjcsImZpbGVHVUlEIjoicDJ6bXFRV0sydllQZkVIRiIsImlhdCI6MTY1MzA1NjUyNywidXNlcklkIjo3OTYxNTQ3OH0.BeoSgdiGdq8GvUKohqwDah5yh_BIk82Cxxg40leEfy0
1:配置模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.confbr_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

    sudo sysctl --system  # 手动加载所有的配置文件
    
    若重载配置后报错
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
则加载驱动
  modprobe br_netfilter 
  bridge     
  
2: 使用yum安装需要配置yum源。本次安装使用centos7.6 的os操作系统,使用阿里云 centos7 yum源     
     wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
     yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
     
3:安装containerd
   yum install -y containerd

4:      配置crictl  
        VERSION="v1.23.0"
         wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
         sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
          rm  -f crictl-$VERSION-linux-amd64.tar.gz
   
  vi /etc/crictl.yaml 
  runtime-endpoint: unix:///var/run/containerd/containerd.sock
  image-endpoint: unix:///var/run/containerd/containerd.sock
  timeout: 2
  debug: false
  pull-image-on-create: false 
  
 # crictl ps
  CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID
 如上则安装成功
 
 # crictl ps
 FATA[0000] listing containers: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService
若提示这个信息 则需做以下操作
 cat > /etc/containerd/config.toml <<EOF
[plugins."io.containerd.grpc.v1.cri"]
systemd_cgroup = true
EOF
 
 systemctl restart containerd

安装kubeadm( master和node)

  添加阿里云YUM软件源
$ 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
  
  wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  rpm --import yum-key.gpg

  wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  rpm --import rpm-package-key.gpg        
  
  $ yum makecache fast
  yum install -y kubelet kubeadm kubectl
  systemctl enable kubelet

初始化集群 (master)

kubeadm init --apiserver-advertise-address=xx.x.x.x \     
       --service-cidr=10.1.0.0/16 \      
       --pod-network-cidr=192.168.0.0/16

如果镜像拉不下来则重置kubeadm reset -f 后使用
kubeadm init --apiserver-advertise-address=10.0.20.16 --service-cidr=10.1.0.0/16 --pod-network-cidr=192.168.0.0/16  --image-repository registry.aliyuncs.com/google_containers --v=5 (--v=5 可以看到详情的报错信息)

crictl images 命令可以看到拉下来的镜像
镜像重命名的方法:crictl -n k8s.io tag registry.aliyuncs.com/google_containers/coredns:v1.8.6 registry.k8s.io/coredns:v1.8.6

       配置kubeconfig
        mkdir -p $HOME/.kube  
        sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  
        sudo chown $(id -u):$(id -g) $HOME/.kube/config
         export KUBECONFIG=/etc/kubernetes/admin.conf

    注:pod cidr:flannel 默认是10.244.0.0/16calico 默认是192.168.0.0/16    
        apiserver-advertise-address 填写的是服务器网卡ip地址
        firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly      
        云服务器需要开放 6443 10250 端口
        (Kubernetes API Server提供HTTP的两个端口:8080,6443。insecure-port: 默认端口8080,在HTTP中没有认证和授权检查。secure-port :默认端口6443)

Master节点端口

端口用途
6443Kubernetes API server
2379-2380etcd server client API
10250kubelet API
10251Kube-scheduler
10252Kube-controller-manager

安装calico网络插件

文档  https://projectcalico.docs.tigera.io/getting-started/kubernetes/quickstart
执行
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/custom-resources.yaml

或者
wget https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f  calico.yaml

node 加入集群(命令在执行完kubadmin init后会返回示例)

kubeadm join 192.168.253.130:6443 --token n73mk6.jpb243k6a8t3vxpl \> --discovery-token-ca-cert-hash sha256:5ad80765eafd3db0982dfe4514ab8e87550b8062aec6a42ac1a0e6bfcd93595e 
若token过期后再加入集群可使用命令重新生成token  
kubeadm token create --print-join-command

**问题和解决:使用kubeadm 安装k8s,环境已安装docker 并未停掉的情况下 出现无法使用containerd的问题 **

   如果你不指定运行时,则 kubeadm 会自动尝试检测到系统上已经安装的运行时, 方法是扫描一组众所周知的 Unix 域套接字。 
   下面列举了一些容器运行时及其对应的套接字路径:
Runtime Path to Unix domain socket
Docker /var/run/dockershim.sock
containerd /run/containerd/containerd.sock
CRI-O /var/run/crio/crio.sock

如果同时检测到 Docker 和 containerd,则优先选择 Docker。 
因为 Docker 18.09 附带了 containerd 并且两者都是可以检测到的,  
如果检测到其他两个或多个运行时,kubeadm 输出错误信息并退出。所以需要将docker卸载
Logo

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

更多推荐