centos7下搭建kubernetes集群
centos7下从无到有搭建kubernetes集群一、环境准备二、安装三、创建集群四、证书过期问题五、work节点如何执行kubectl命令六、master节点也可以部署自己的pod一、环境准备准备三个节点,hostname为master,worker1,worker2。建立/etc/hosts的ip映射。关闭三个节点的防火墙systemctl stop firewalld &...
centos7下从无到有搭建kubernetes集群
一、环境准备
- 准备三个节点,hostname为master,worker1,worker2。建立/etc/hosts的ip映射。
- 关闭三个节点的防火墙
systemctl stop firewalld && systemctl disable firewalld
- 关闭三个节点的swap
vi /etc/fstab
注释有swap的那一行
- 关闭三个节点的SELINUX
修改/etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled
保存
临时设置
setenforce 0
设置完成后使用getenforce如果返回值是Permissive则设置成功
- 配置三个节点的Kubernetes源为阿里镜像源
在/etc/yum.repos.d目录中增加kubernetes.repo文件
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
- 配置三个节点的docker源
在/etc/yum.repos.d目录中增加docker-ce.repo文件。文件内容可以从官网找。
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://download.docker.com/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://download.docker.com/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://download.docker.com/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://download.docker.com/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
- 安装ipvs
安装ipset和ipvsadm
yum install -y ipset ipvsadm
所有节点内核加载ipvs模块
modprobe br_netfilter
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4
二、安装
配置好环境后我们开始搭建安装kubernetes环境。
三个节点都需要执行下面的步骤,镜像可以使用docker save/load迁移。
- 安装kubernetes三件套
yum install -y kubelet kubeadm kubectl
- 安装docker
yum list installed | grep docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y docker-ce
systemctl start docker && systemctl enable docker
3.下载kubernetes镜像
由于k8s.gcr.io域名被封,所以使用hub.docker.com的镜像
docker pull mirrorgooglecontainers/kube-apiserver-amd64:$K8S_VERSION
docker pull mirrorgooglecontainers/kube-controller-manager-amd64:$K8S_VERSION
docker pull mirrorgooglecontainers/kube-scheduler-amd64:$K8S_VERSION
docker pull mirrorgooglecontainers/kube-proxy-amd64:$K8S_VERSION
docker pull mirrorgooglecontainers/etcd-amd64:$ETCD_VERSION
docker pull mirrorgooglecontainers/pause:$PAUSE_VERSION
docker pull coredns/coredns:$DNS_VERSION
其中K8S_VERSION,ETCD_VERSION,PAUSE_VERSION,DNS_VERSION请选择与刚才安装的kubernetes相对应的版本
使用docker tag命令依次修改上面的镜像名为
k8s.gcr.io/kube-apiserver
k8s.gcr.io/kube-controller-manager
k8s.gcr.io/kube-scheduler
k8s.gcr.io/kube-proxy
k8s.gcr.io/etcd
k8s.gcr.io/pause
k8s.gcr.io/coredns
三、创建集群
- master节点创建集群
kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=$K8S_VERSION --apiserver-advertise-address=master
- 命令介绍:
–pod-network-cidr指定192.168.0.0是集群的子网范围
$K8S_VERSION与上面的kubernetes镜像版本一致
–apiserver-advertise-address是master节点的网卡ip
返回结果中的
You can now join any number of machines by running the following on each node
as root:
这句话下面的命令一定要保存,用于以后加入节点。
-
可能遇到问题1:The connection to the server localhost:8080 was refused - did you specify the right host or port?
添加环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf -
重置集群
如果遇到错误需要重新创建,则执行
kubeadm reset
- 启动集群master节点k8s服务
systemctl enable kubelet && systemctl start kubelet
- master节点创建网络
如果不创建网络,查看pod状态时,可以看到kube-dns组件是阻塞状态,查看node状态集群是不可用的。前面创建集群的时候我们使用Calico网络。根据官方文档,在master节点上,需要执行如下命令:
kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml
其中,3.7的版本号可以修改为更高版本。执行完成后等待一段时间master状态变更为ready
- 将其他work节点加入集群
kubeadm join master:6443 --token kt62dw.q99dfynu1kuf4wga --discovery-token-ca-cert-hash sha256:5404bcccc1ade37e9d80831ce82590e6079c1a3ea52a941f3077b40ba19f2c72
使用kubeadm join命令把work节点加入master节点创建的集群中
- 验证集群是否工作
使用下面的命令
kubectl get nodes
如果全部节点都为ready则成功。
6.kube-proxy iptables模式改为 ipvs模式
管理大量节点时ipvs模式的性能要优于iptables。
kubectl edit cm kube-proxy -n kube-system
将mode: ""修改为mode: “ipvs”
:wq保存
kubectl get pods -n kube-system|grep proxy
删除上面命令显示的proxy的pods,之后会重新建立新的pod。
kubectl delete pod [pod名称] -n kube-system
查看日志,显示Using ipvs Proxier就说明运行在ipvs模式了。因为修改了configmap,所以以后再添加新的节点会自动使用ipvs模式。
kubectl log [pod名称] -n kube-system
四、证书过期问题
- kubeadm join证书过期
过段时间执行kubeadm join再将新节点加入集群的时候会报下面的错误
unable to fetch the kubeadm-config ConfigMap: failed to get config map: Unauthorized
遇到这个问题我们需要新建token
kubeadm token create
创建好后,查看刚才创建的token
kubeadm token list
使用列表中的token,替换上面命令的–token
kubeadm join master:6443 --token kt62dw.q99dfynu1kuf4wga --discovery-token-ca-cert-hash sha256:5404bcccc1ade37e9d80831ce82590e6079c1a3ea52a941f3077b40ba19f2c72
- 集群证书过期
api-server,scheduler等k8s组件的证书可通过下面的命令检查
kubeadm alpha certs check-expiration
如果证书过期,执行下面的步骤:
(1)保存配置文件
kubeadm config view > ~/kubeadm-config.yaml
(2)刷新所有配置的证书
kubeadm alpha certs renew all --config=~/kubeadm-config.yaml
执行完成后再验证证书效期是否已经延长。
(3)备份配置文件并重新生成新的
mv /etc/kubernetes/*.conf ~/kubeconfback/
kubeadm init phase kubeconfig all --config=~/kubeadm-config.yaml
(4)重启 kube-apiserver,etcd,scheduler,controller 容器
docker ps | grep -v pause | grep -E "etcd|scheduler|controller|apiserver" | awk '{print $1}' | awk '{print "docker","restart",$1}' | bash
五、work节点如何执行kubectl命令
如果遇到错误提示:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
将master节点的/etc/kubernetes/admin.conf拷贝到work节点相同目录下
work节点添加环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf
六、master节点也可以部署自己的pod
Kubernetes集群默认不会将Pod调度到master上。如果集群规模小master节点就显得很浪费。
我们需要去掉master节点的污点
kubectl taint nodes --all node-role.kubernetes.io/master-
如果以后要恢复则执行下面的命令
kubectl taint nodes k8s0 node-role.kubernetes.io/master=true:NoSchedule
更多推荐
所有评论(0)