kubeadm部署kubernetes v1.19.0集群

一、准备环境

三台2G+内存4核CPU的centos7.8, 单网卡

1、所有节点主机名及绑定

127.0.0.1  localhost localhost.localdomain localhost4
localhost4.localdomain4
::1     localhost localhost.localdomain localhost6
localhost6.localdomain6
10.0.0.61  master
10.0.0.62  node1
10.0.0.63  node2

2、所有节点关闭selinux,关闭firewalld,安装iptables服务,并保存为空规则

systemctl stop firewalld
systemctl disable firewalld
yum install iptables-services -y
systemctl restart iptables
systemctl enable iptables
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -F -t raw
service iptables save

3、所有节点时间同步

a、所有节点上安装ntpdate,并启动服务

yum -y install ntp ntpdate
systemctl start chronyd  
systemctl enable chronyd

b、修改master的/etc/chrony.conf,#掉第3456行的同步服务器,把26行的allow注释删掉,并修改为节点网点,同时把29行local stratum 的#去掉

c、修改node的/etc/chrony.conf,#掉第3456行的同步服务器,并加上 server master iburst

d、在node同步master

ntpdate master

4、所有节点准备yum源(在centos默认源的基础上再加上以下两个yum源)

vim /etc/yum.repos.d/kubernetes.repo
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

5、 所有节点关闭swap(kubernetes1.8开始不关闭swap无法启动)

# swapoff -a
打开fstab文件将swap那一行注释保存
# vim /etc/fstab
UUID=38182b36-9be4-45f8-9b3f-f9b3605fcdf0 /           xfs   defaults     0 0
UUID=6b69e04f-4a85-4612-b1c0-24939fd84962 /boot         xfs   defaults     0 0
#UUID=9ba6a188-d8e1-4983-9abe-ba4a29b1d138 swap         swap  defaults    0 0

6、RHEL7和CentOS7有由于iptables被绕过而导致流量路由不正确的问题,需要所有节点做如下操作

cat > /etc/sysctl.d/k8s.conf <<EOF
net.ipv4.ip_forward = 1
vm.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf
modprobe br_netfilter
lsmod |grep br_netfilter

7、所有节点设置kube-proxy开启ipvs的前置条件
由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提需要加载以下的内核模块

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
sh /etc/sysconfig/modules/ipvs.modules
lsmod |egrep 'ip_vs|nf_conntrack'

8、 所有节点安装docker
一定要注意docker版本,docker最新版本kubernetes不一定支持,下面就是使用最新19.03.01跑docker在集群始化时报的错.所以在这里我们使用18.09的版本

yum list docker-ce.x86_64 --showduplicates | sort -r
yum install docker-ce-18.09.8-3.el7 docker-ce-cli-18.09.8-3.el7 --setopt=obsoletes=0 -y
docker -v
systemctl start docker
systemctl enable docker

9、所有节点配置加速器和将cgroupdrivier改为systemd,并重启docker服务

vim /etc/docker/daemon.json
{
 "registry-mirrors":
["https://42h8kzrh.mirror.aliyuncs.com"],
 "exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl restart docker

10、所有节点安装kubelet,kubeadm,kubectl.并 enable kubelet 服务(注意:不要start启动)

yum install kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0 -y
systemctl enable kubelet

11、kubeadm初始化
在master节点上操作(其它节点不操作)

kubeadm init \
  --apiserver-advertise-address=10.0.0.61 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.19.0 \
  --service-cidr=192.168.96.0/20 \
  --pod-network-cidr=192.168.244.0/24 \
  --ignore-preflight-errors=all

验证镜像

[root@master ~]# docker images
REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE
<none>                                                            <none>              c9ce67bd5f34        13 hours ago        653MB
registry.aliyuncs.com/google_containers/kube-proxy                v1.19.0             bc9c328f379c        6 months ago        118MB
registry.aliyuncs.com/google_containers/kube-apiserver            v1.19.0             1b74e93ece2f        6 months ago        119MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.19.0             09d665d529d0        6 months ago        111MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.19.0             cbdc8369d8b1        6 months ago        45.7MB
calico/node                                                       v3.15.1             1470783b1474        8 months ago        262MB
calico/pod2daemon-flexvol                                         v3.15.1             a696ebcb2ac7        8 months ago        112MB
calico/cni                                                        v3.15.1             2858353c1d25        8 months ago        217MB
calico/kube-controllers                                           v3.15.1             8ed9dbffe350        8 months ago        53.1MB
registry.aliyuncs.com/google_containers/etcd                      3.4.9-1             d4ca8726196c        8 months ago        253MB
registry.aliyuncs.com/google_containers/coredns                   1.7.0               bfe3a36ebd25        9 months ago        45.2MB
registry.aliyuncs.com/google_containers/pause                     3.2                 80d28bedfe5d        13 months ago       683kB

12、创建Calico网络

mkdir /root/k8s && cd /root/k8s
wget https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f calico.yaml

下载完后还需要修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init指定的一样,这里的value 必须是你kubeadm.yaml 里面定义的 service 地址池。

13、验证master节点OK

kubectl get nodes
kubectl get pods -n kube-system

14、在master上查询加入集群的命令,并加入其它节点
在master上查询命令

kubeadm token create --print-join-command --ttl 0

在node1上join集群

kubeadm join 10.0.0.61:6443 --token umw6jn.cnwiwloeh7s55css     --discovery-token-ca-cert-hash sha256:b60486c5e9a3e68ff62d683fc52456b45a20883afb7ed70e7f6deb1c86de77b2

在node2上join集群

kubeadm join 10.0.0.61:6443 --token umw6jn.cnwiwloeh7s55css     --discovery-token-ca-cert-hash sha256:b60486c5e9a3e68ff62d683fc52456b45a20883afb7ed70e7f6deb1c86de77b2

15、确认集群OK
在master上验证集群OK

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE    VERSION
master   Ready    master   13h    v1.19.0
node1    Ready    <none>   166m   v1.19.0
node2    Ready    <none>   165m   v1.19.0

16、移除节点的做法(假设移除node2)
a、在master节点上执行

kubectl drain node2 --delete-local-data --force --ignore-daemonsets
kubectl delete node node2

b、在node2节点上执行

kubeadm reset
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/

c、在node1上执行

kubectl delete node node2

注意:如果初始化遇到问题,尝试使用下面的命令清理,再重新初始化

kubeadm reset
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
posted @ 2021-03-22 12:17  魏阳晨  阅读(159)  评论(0)    收藏  举报
AmazingCounters.com