1.安装Docker和Kubenetes
禁用SELinux
#这个设置在重启后失效
setenforce 0
#要永久禁用需要修改/etc/selinux/config文件
将SELINUX=enforcing改为SELINUX=permissive
禁用防火墙
systemctl disable firewalld && systectl stop firewalld
在yum仓库中添加kubenetes的国内源
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装Docker,Kubelet,Kubeadm,Kubectl,Kubernetes-CNI
yum install -y docker kubelet kubeadm kubectl kubernetes-cni
设置开机启动Docker,Kubelet
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet
sysctl -w net.bridge.bridge-nf-call-iptables=l
echo "net.bridge.bridge-nf-call-iptables=l"> /etc/sysctl.d/k8s.conf
swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab
为每个节点配置hostname并在各个节点的/etc/hosts文件中添加映射关系
以上环境准备工作需要在master节点和工作节点都进行一遍
2.Master节点配置
#拉取coredns镜像
docker pull rancher/coredns-coredns:1.8.3
#重新tag打成需要的标签
docker tag docker.io/rancher/coredns-coredns:1.8.3 registry.aliyuncs.com/google_containers/coredns:v1.8.4
#删除不用的镜像
docker rmi docker.io/rancher/coredns-coredns:1.8.3
#执行初始化命令,注意添加国内镜像源
kubeadm init --image-repository registry.aliyuncs.com/google_containers --ignore-preflight-errors=Swap
该命令的输出的最后一行需要记录下来,后面要用来配置工作节点,格式如下:
kubeadm join 192.168.91.151:6443 --token ud2kk3.2j9bokteu5wt929q \
--discovery-token-ca-cert-hash sha256:7d9d95e33ba22a0a12a966e182673911f2af67e6833b9e8d0df66048854e5905
配置kubectl
在配置过kubeconfig文件之前,无法使用kubectl与集群进行通信,
/etc/kubemetes/admin.conf文件中有必要的一些配置。只需通过设置KUBECONFIG环境变量让kubectl使用它即可
export KUBECONFIG=/etc/kubernetes/admin.conf
配置etcdctl
#查看k8s中etcd的版本
kubectl describe pods etcd-master -n kube-system
我这里的版本为3.5.0,下载etcd版本,解压,copy etcdctl到k8s master节点的/usr/bin目录下
#下载etcd
wget https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz
#解压etcd
tar -xf etcd-v3.5.0-linux-amd64.tar.gz
#拷贝其中的etcdctl到/usr/bin目录
获取etcd的endpoint
- command:
- etcd
- --advertise-client-urls=https://192.168.91.151:2379
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --client-cert-auth=true
- --data-dir=/var/lib/etcd
- --initial-advertise-peer-urls=https://192.168.91.151:2380
- --initial-cluster=master=https://192.168.91.151:2380
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --listen-client-urls=https://127.0.0.1:2379,https://192.168.91.151:2379
- --listen-metrics-urls=http://127.0.0.1:2381
- --listen-peer-urls=https://192.168.91.151:2380
- --name=master
- --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
- --peer-client-cert-auth=true
- --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
- --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
- --snapshot-count=10000
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
etcd的endpoint为https方式,所以要为etcdctl命令准备key和cert
key使用/etc/kubernetes/pki/etcd/peer.key
cert使用/etc/kubernetes/pki/etcd/peer.crt
因为集群证书为自签发,所以这里需要加上–insecure-skip-tls-verify参数,不然会报错误
etcdctl --cert /etc/kubernetes/pki/etcd/peer.crt --key /etc/kubernetes/pki/etcd/peer.key --endpoints https://192.168.91.151:2379 --insecure-skip-tls-verify member list
3.工作节点安装配置
在工作节点执行init后记录下来的命令,就可以将工作节点加入集群:
kubeadm join 192.168.91.151:6443 --token ud2kk3.2j9bokteu5wt929q \
--discovery-token-ca-cert-hash sha256:7d9d95e33ba22a0a12a966e182673911f2af67e6833b9e8d0df66048854e5905
4.配置容器网络
此时调用kubectl get node,返回的节点状态是NotReady,因为还没有配置集群网络
执行以下命令将完成网络的配置
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')
此时调用kubectl get node,会发现所有的节点状态为Ready,集群搭建完成