k8s v1.17.3 安装

参考了:
https://blog.csdn.net/liukuan73/article/details/83116271?utm_source=blogxgwz3
https://www.cnblogs.com/cloudnative/p/12979825.html
https://blog.csdn.net/shykevin/article/details/98811021

1. 准备工作

1.1 环境信息
操作系统:Ubuntu 16.04 LTS
1.2 关闭防火墙

$ sudo ufw disable   

1.3 禁用SELINUX
ubuntu默认不安装selinux,假如安装了的话,按如下步骤禁用selinux
临时禁用(重启后失效)

$ sudo setenforce 0                 #0代表permissive 1代表enforcing

永久禁用

$ sudo vi /etc/selinux/config
SELINUX=permissive  

1.4 开启数据包转发
1.4.1 内核开启ipv4转发
1.修改/etc/sysctl.conf,开启ipv4转发:

$ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward = 1             #开启ipv4转发,允许内置路由

2.写入后执行如下命令生效:

$ sudo sysctl -p

1.4.2 防火墙修改FORWARD链默认策略
数据包经过路由后,假如不是发往本机的流量,下一步会走iptables的FORWARD链,而docker从1.13版本开始,将FORWARD链的默认策略设置为DROP,会导致出现一些例如跨主机的两个pod使用podIP互访失败等问题。解决方案有2个:
在所有节点上开机启动时执行iptables -P FORWARD ACCEPT
让docker不操作iptables
方案一:
临时生效:

$ sudo iptables -P FORWARD ACCEPT

iptables的配置重启后会丢失,可以将配置写进/etc/rc.local中,重启后自动执行:
/usr/sbin/iptables -P FORWARD ACCEPT

方案二:
设置docker启动参数添加–iptables=false选项,使docker不再操作iptables,比如1.10版以上可编辑docker daemon默认配置文件/etc/docker/daemon.json:

{
    "iptables": false
}

1.5 禁用swap
1.禁掉所有的swap分区

$ sudo swapoff -a
  1. 同时还需要修改/etc/fstab文件,注释掉 SWAP 的自动挂载,防止机子重启后swap启用。
    1.6 配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙
$ sudo tee /etc/sysctl.d/k8s.conf <<-'EOF'
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

$ sudo sysctl --system

2. 安装docker

2.1 安装Docker 19.03

安装基础组件

$ apt update && apt install -y apt-transport-https software-properties-common ntp ntpdate

添加源

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

更新

$ apt update

列出当前安装Docker版本

$ apt-cache madison docker-ce

安装指定版本 19.03.7

$ apt install docker-ce=5:19.03.7~3-0~ubuntu-bionic

2.2 docker启动参数配置

$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
 "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"],
 "iptables": false,
 "ip-masq": false,
 "storage-driver": "overlay2",
 "graph": "/home/lk/docker"
}
EOF

$ sudo systemctl restart docker

2.3 配置docker使用systemd

$ cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

$ mkdir -p /etc/systemd/system/docker.service.d
$ systemctl daemon-reload
$ systemctl restart docker

3. 安装kubeadm、kubelet、kubectl

这些包都已经附在文末

$ curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

$ cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

$ apt-get update
$ apt install kubernetes-cni
$ apt --fix-broken install

$ dpkg -i http://mirrors.aliyun.com/kubernetes/apt/pool/kubeadm_1.17.3-00_amd64_a993cfe07313b10cb69c3d0a680fdc0f6f3976e226d5fe3d062be0cea265274c.deb
$ dpkg -i http://mirrors.aliyun.com/kubernetes/apt/pool/kubelet_1.17.3-00_amd64_f0b930ce4160af585fb10dc8e4f76747a60f04b6343c45405afbe79d380ae41f.deb
$ dpkg -i http://mirrors.aliyun.com/kubernetes/apt/pool/kubectl_1.17.3-00_amd64_289913506f67535270a8ab4d9b30e6ece825440bc00a225295915741946c7bc6.deb
###
$ apt-mark hold kubelet kubeadm kubectl docker-ce

4. Kubernetes集群安装

—image-repository 指定镜像源,指定为阿里云的源,这样就会避免在拉取镜像超时,如果没问题,过几分钟就能看到成功的日志输入

$ sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.17.3 --apiserver-advertise-address=172.16.59.129 --pod-network-cidr=10.244.0.0/16

部署成功会输出如下内容:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.16.59.129:6443 --token axiuvd.mpnlyaefj29gwzhf \
    --discovery-token-ca-cert-hash sha256:29c432b40f6fb55c5b42a04dcffd437fab7b9719c33322bf3102aaf6696ca000 

记下其中的token,加入node节点时会用到。(最后一整行)
4.1.3 检查kubelet使用的cgroup driver
kubelet启动时指定的cgroup driver需要和docker所使用的保持一致。
1.查看 Docker 使用的 cgroup driver:

$ docker info | grep -i cgroup
-> Cgroup Driver: cgroupfs/systemd

2.查看kubelet指定的cgroup driver
Kubernetes文档中kubelet的启动参数–cgroup-driver string Driver that the kubelet uses to manipulate cgroups on the host. Possible values: ‘cgroupfs’, ‘systemd’ (default “cgroupfs”)。默认值为cgroupfs。yum安装kubelet、kubeadm时生成10-kubeadm.conf文件中可能将这个参数值改成了systemd。
查看kubelet的配置文件(1.12.0版本的封装在/var/lib/kubelet/kubeadm-flags.env文件中),如果是默认的cgroupfs,不需要修改。否则需要修改/etc/default/kubelet(或者/var/lib/kubelet/kubeadm-flags.env)文件:

$ sudo vim /etc/default/kubelet
    KUBELET_KUBEADM_EXTRA_ARGS=--cgroup-driver=<value>    
$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet

4.1.4 创建kubectl使用的kubeconfig文件

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

创建完成即可使用kubectl操作集群。
4.1.5 设置master参与工作负载
使用kubeadm初始化的集群,将master节点做了taint(污点),使得默认情况下(不设置容忍)Pod不会被调度到master上。这里搭建的是测试环境可以使用下面的命令去掉master的taint,使master参与工作负载:

$ kubectl taint nodes --all node-role.kubernetes.io/master-
 node/hostname untainted

4.2 网络部署
4.2.2 flannel网络部署
calico部署会同时部署cni插件以及calico组件两部分,而flannel的部署只会初始化一些cni的配置文件,并不会部署cni的可执行文件,需要手动部署,所以flannel部署分为两步:
CNI插件部署
flannel组价部署
步骤一.CNI插件部署(所有节点)
1.创建cni插件目录

sudo mkdir -p /opt/cni/bin
cd /opt/cni/bin

2.到release页面下载二进制文件

sudo wget https://github.com/containernetworking/plugins/releases/download/v0.7.1/cni-plugins-amd64-v0.7.1.tgz

3.在/opt/cni/bin目录下解压即安装好

sudo tar -zxvf cni-plugins-amd64-v0.7.1.tgz

步骤二.flannel部署
1.获取yaml文件

$ cd ~/kubeadm
$ wget https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

2.修改配置文件
<1>修改其中net-conf.json中的Network参数使其与kubeadm init时指定的–pod-network-cidr保持一致。
<2>这里v0.10.0版有一个bug,需要为启动flannel的daemonset添加toleration,以允许在尚未Ready的节点上部署flannel pod:

  tolerations:
  - key: node-role.kubernetes.io/master
    operator: Exists
    effect: NoSchedule
  #添加下面这个toleration
  - key: node.kubernetes.io/not-ready
    operator: Exists
    effect: NoSchedule

可以参考这个issue:https://github.com/coreos/flannel/issues/1044
3.镜像下载
下载yaml文件中所需镜像。quay.io镜像被墙下不了可以从这里下载:https://hub.docker.com/r/jmgao1983/flannel/tags/ , 之后再打回原tag。
4.部署

kubectl apply -f kube-flannel.yml

假如网络部署失败或出问题需要重新部署,执行以下内容清除生成的网络接口:

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

4.3 slave节点部署
同样按照上述步骤安装好docker、kubelet,并将master节点上的/etc/kubernetes/pki/etcd拷贝到slave相同位置,用于calico-node连接etcd使用,然后在slave节点上执行以下命令即可加入集群:

kubeadm join 192.168.1.175:6443 --token w2ks3i.13l40j8ux38oz31r --discovery-token-ca-cert-hash sha256:387a9081b55dbed4263c22c9a8ffd5e7270c1bcdcca4299c2a69cba7d3df74e7

注意:默认token的有效期为24小时,当过期之后,该token就不可用了。此时可以重新生成token:

kubeadm token generate
kubeadm token create <generated-token> --print-join-command --ttl=0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值