在centos7中部署kubernetes集群

在部署之前呢,我们准备三台机器,安装centos7的操作系统,工作准备就绪,我开始进行安装k8s前系统基本设置。

1、进入这三台机器,编辑/etc/hosts加入:

10.6.15.10 k8s-master

10.6.15.11 node01

10.6.15.12 node02

2、禁用selinux

编辑/etc/sysconfig/selinux,修改成SELINUX=disabled

3、启用br_netfilter模块

modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

4、禁用交换分区

swapoff -a

然后编辑/etc/fstab文件,将swap这行注释掉

5、安装docker-ce

yum install -y yum-utils device-mapper-persistent-data lvm2\
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce

6、安装kubernets,创建repo文件:

cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

安装:yum install -y kubelet kubeadm kubectl

重启机器,然后完毕后让docker开机启动:

systemctl start docker && systemctl enable docker

systemctl start kubelet && systemctl enable kubelet

7、修改docker的cgroup Driver,修改这步骤主要是k8s用的是systemd,要保存跟k8s一致,如果不一致初始化时会有警告:

运行:docker info | grep -i cgroup 查看

修改为systemd方式,新建文件:

vi /etc/docker/daemon.json 加入

{
“exec-opts”: [“native.cgroupdriver=systemd”]
}

重启docker:systemctl restart docker &&systemctl status docker

以上步骤要在master和所有node节点全部执行。

8、master初始化:

kubeadm init –pod-network-cidr 10.244.0.0/16

指定pod网段,初始化完毕后会有提示,按提示操作就可以了,如下:

mkdir -p $HOME/.kube

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

chown $(id -u):$(id -g) $HOME/.kube/config

9、安装网络插件flannel:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

10、验证:

kubct get nodes

kubectl get pods –all-namespaces

11、加入node节点:

复制初始化后的kubeadm join 命令,在node1上执行,成功后回到master节点,运行:kubectl get nodes, 查看结果,一会就会变成ready状态。

12、测试集群情况,在master节点,运行:

kubectl create deployment nginx –image=nginx

kubectl get pod

kubectl describe deployment nginx

kubectl create service nodeport nginx –tcp=80:80

kubectl get svc

curl node01:30982

到此安装完毕,出现的问题,中间Kubeadmin apiserver ip地址写错了,中间发现错误,ctrl+c结束了任务,结果后面修改正确master地址后也不能执行Init了,后来通过修改master ip地址方式解决,如下:

systemctl stop kubelet docker

cd /etc/

# backup old kubernetes data
mv kubernetes kubernetes-backup
mv /var/lib/kubelet /var/lib/kubelet-backup

# restore certificates
mkdir -p kubernetes
cp -r kubernetes-backup/pki kubernetes
rm kubernetes/pki/{apiserver.*,etcd/peer.*}

systemctl start docker

# reinit master with data in etcd
# add --kubernetes-version, --pod-network-cidr and --token options if needed
# 原文使用如下命令:
# kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd
# 但是由于我使用的是Flannel网络,所以一定要加上参数,否则后续安装 flannel addon无法启动pod
kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd --pod-network-cidr=10.244.0.0/16

# update kubectl config
cp kubernetes/admin.conf ~/.kube/config

# wait for some time and delete old node
sleep 120
kubectl get nodes --sort-by=.metadata.creationTimestamp
kubectl delete node $(kubectl get nodes -o jsonpath='{.items[?(@.status.conditions[0].status=="Unknown")].metadata.name}')

# check running pods
kubectl get pods --all-namespaces

master节点污点设置,可以调度到master节点上:

kubectl get pods -o wide

kubectl describe node k8s-master|grep -i taints #查看

Kubectl taint nodes k8s-master node-role.kubernetes.io/master- #删除现在污点

设置污点语法:kubectl taint node [node] key=value[effect]

打回刚才master污点命令如下:

kubectl taint nodes k8s-master key1=value1:NoSchedule

这样就恢复了之前删除的master污点前的设置。

参考链接:
https://cloud-atlas.readthedocs.io/zh_CN/latest/kubernetes/deployment/bootstrap_kubernetes/change_master_ip.html