搭建k8s

摘要:
否则,服务将被阻止。Vm。swappiness=0#禁止交换空间。只有当系统是OOM时,才允许使用vm。overcommit_Memory=1#不检查物理内存是否足够vm。panic_on_Oom=0#打开OOMfs.inotify。max_ user_ instances=8192fs.inotify。max_user_watches=1048576fs.file max=52706963fs。nr_打开=52706963net.ipv6.conf.all。disable_ Ipv6=1#关闭未使用的Ipv6协议堆栈,以防止触发dockerBUG.net.netfilter。nf_conntrack_Max=2310720EOF6.kube代理是启用ipvs modprobebr_netfiltercat˃ipvs.sh˂˂EOF#!
How to setup k8s cluster on ubuntu?

一、设置基本环境(需要开启超级用户权限)

1. 禁止selinux

安装控制selinux的命令:

apt-get install -y selinux-utils

禁止selinux:

setenforce 0

重启操作系统:

 shutdown -r now    

查看selinux是否已经关闭:

getenforcesudo

显示Disabled表示则已经关闭

2. 关闭swap分区

swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab

重启机器后使用free -m查看分区状态swap一行应该都为0,因swap分区重新挂载需要修改文件权限:

mount -o remount rw /

3. 配置网络和主机名

关闭防火墙:

ufw disable

配置DNS:

vi /etc/systemd/resolved.conf并添加DNS=8.8.8.8 211.142.211.124 8.8.8.4

重启网络服务:

8.8.8.8 211.142.211.124 8.8.8.4

添加主机名(每个k8s节点都做相同配置,vi /etc/hostname可修改主机名)以区分主从节点,也可不做此配置:

vi /etc/hosts
172.16.1.34   master
172.16.1.35     worker1
172.16.233.52   worker2

4. 设置ntp确保时钟时间同步

crontab -e 编辑添加以下命令用于每小时更新ntp

* */1 * * * ntpdate time1.aliyun.com

5. 设置kubernetes启动参数

cat >/etc/sysctl.d/kubernetes.conf<
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0 #由于tcp_tw_recycle与kubernetes的NAT冲突,必须关闭!否则会导致服务不通。
vm.swappiness=0           #禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1     #不检查物理内存是否够用
vm.panic_on_oom=0         #开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1 #关闭不使用的ipv6协议栈,防止触发docker BUG.
net.netfilter.nf_conntrack_max=2310720
EOF

6. kube-proxy开启ipvs的前置条件

modprobe br_netfilter
cat >ipvs.sh<< EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod +x ipvs.sh && sh ipvs.sh
lsmod | grep ip_vs

 

二、安装docker

1. 安装 apt 依赖包,用于通过HTTPS来获取仓库,更新apt源

apt-get -y install  apt-transport-https ca-certificates curl gnupg-agent software-properties-common

2. 添加 Docker 的官方 GPG 密钥

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

验证添加的密钥是否成功:

apt-key fingerprint 0EBFCD88

3. 设置稳定版docker下载源

add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu  $(lsb_release -cs) stable"
apt-get update

4. 查看docker版本,选择要安装的docker版本

 apt-cache madison docker-ce

5. 安装docker-ce指定版本

apt-get install  docker-ce=18.06.0~ce~3-0~ubuntu

查看安装是否成功

docker --version

6. 修改docker的cgroup driver,并设置为阿里云源

tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts":["native.cgroupdriver=systemd"],
"registry-mirrors":["https://f3lu6ju1.mirror.aliyuncs.com"]
}
EOF

7. 设置开机自启并重启docker

systemctl enable docker
systemctl daemon-reload && systemctl restart docker

 

三、安装 kubectl、kubelet、kubeadm

1. 添加阿里云k8s源

curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat </etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update

2. 查看可安装版本

apt-cache madison kubectl

3. 安装指定版本的kubelet、kubeadm、kubectl

apt-get install -y kubelet=1.17.0-00 kubeadm=1.17.0-00 kubectl=1.17.0-00

查看安装是否成功

kubectl version
kubeadm version

4. 设置开机自启

systemctl enable kubelet.service

5. 配置kubelet禁用swap,并重启

tee /etc/default/kubelet <
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF
systemctl daemon-reload && systemctl restart kubelet

 

四、开始部署k8s集群

1. 下载k8s的基础镜像

vi pullimages.sh

将以下内容添加到 pullimages.sh 中

#!/bin/bash
kubeadm config images list > /root/.a.txt
for i in $( cat /root/.a.txt )
do
docker pull registry.aliyuncs.com/google_containers/${i#*/}
docker tag registry.aliyuncs.com/google_containers/${i#*/} k8s.gcr.io/${i#*/}
docker rmi registry.aliyuncs.com/google_containers/${i#*/}
done
echo "all initilized docker images download done, please use 'docker images' to check"

给pullimages.sh脚本赋予执行权限,并执行脚本

chmod +x pullimages.sh && sh pullimages.sh

等待脚本执行完毕后,可以通过以下命令,查看已经拉去到的初始镜像

docker images

以上操作在master和node节点都需要做,以下操作分master和node

2. master节点初始化

kubeadm init --image-repository registry.aliyuncs.com/google_containers  --kubernetes-version=v1.17.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=172.16.15.43 | tee kubeadm-init.log

机器重启后可能需要重启kubelet和docker

systemctl daemon-reload && systemctl restart docker && systemctl restart kubelet

如果还不行需要用“kubeadm reset”先重置kubernets服务再"kubeadm init ..."

根据提示设置master节点

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

验证kubernetes启动结果

kubectl get nodes -n kube-system

PS : 注意显示master状态是NotReady,证明初始化服务器成功

允许mster节点部署pod(可选):

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

等一两分钟后使用kubectl get nodes命令

可以看到以下master已经激活:

NAME STATUS ROLES AGE VERSION

k8s-master1 Ready master 3m16s v1.17.0

下载kube-flannel.yml文件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

s检查kube-flannel.yml文件中net-conf.json的Network参数是否跟kubeadm init时的--pod-network-cidr一致

net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
  "Type": "vxlan"
}
}

部署flannel网络插件

kubectl apply -f  kube-flannel.yml

命令执行完毕后,查看节点状态,显示Ready,即flannel网络插件部署成功;

设置集群只允许部署单个coredns组件:

kubectl scale deployments.apps -n kube-system coredns --replicas=1

查看当前集群状态

kubectl get cs

看到以下显示表示集群处于健康状态:

NAME STATUS MESSAGE ERROR

scheduler Healthy ok

controller-manager Healthy ok

etcd-0 Healthy {"health": "true"}

3. node节点加入k8s集群

首先在master机器上执行以下命令:

kubeadm token create --print-join-command

根据生成的kubeadm join命令在,需要加入的node机器上执行该命令,如:

kubeadm join 172.16.15.43:6443 --token gas2fs.8x4bmyk1opibsb3w --discovery-token-ca-cert-hash sha256:343adb6a92e846dcc1dbf5e1b936e7f0350793ebe976cd327e0b3da857326a5c

若机器重启后需重启docker和kubelet服务

systemctl daemon-reload && systemctl restart docker && systemctl restart kubelet

如果还不行需要用“kubeadm reset”先重置kubernets服务再"kubeadm join ..."

等node1加入master后再给node打标签:

kubectl label nodes ${node name} node-role.kubernetes.io/${node role name}=

如:

kubectl label nodes test-super-server node-role.kubernetes.io/worker1=

删除该标签:

kubectl label nodes test-super-server node-role.kubernetes.io/worker1-

当kubelet服务异常时使用一下命令查看错误打印:

systemctl status kubelet
journalctl -xefu kubelet

 

五、Q&A

1. 解决k8s集群在master节点“kubeadm reset”再"kubeadm init ..."之后运行kubectl出现的错误:

Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

rm $HOME/.kube -fr

再次执行

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

即可。

2. 解决k8s集群在worker节点运行kubectl出现的错误:

The connection to the server localhost:8080 was refused - did you specify the right host or port?

root@k8s-master1:# scp -r /etc/kubernetes/admin.conf ${node1}:/tmp

root@k8s-node1:# mv /tmp/admin.conf /etc/kubernetes/ root@k8s-node1:# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile root@k8s-node1:# source ~/.bash_profile

之后在worker节点多终端执行kubectl命令只需要source ~/.bash_profile一下即可

免责声明:文章转载自《搭建k8s》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇docker 部署 flask(一)配置环境及测试apache安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

kubeadmin搭建k8s集群

一、准备环境 准备环境: 角色 IP地址 k8s-master 192.168.56.21 k8s-node01 192.168.56.25 k8s-node02 192.168.56.26 所有节点环境初始化: 关闭防火墙: systemctl stop firewalld systemctl disable firewalld 关...

docker中 WSL 配置 修改

Resources The Resources tab allows you to configure CPU, memory, disk, proxies, network, and other resources. Different settings are available for configuration depending on whet...

解决: Table XX.QRTZ_LOCKS doesn`t exist 的问题

本机环境 window10专业版2004WSL2(Ubuntu18.04)下的Docker容器(Mysql5.7.22) 问题描述: Quartz定时任务项目, 数据库从Windows Mysql迁移到Docker Mysql容器后, 启动项目时, 报Table 'xx.QRTZ_LOCKS' doesn't exist错误 问题原因: Linux系统下M...

gitlab Runner 安装与部署

1、安装gitlab Runner    本次演示为centos 7.5环境,请各位按照自己环境调整   1)在线安装 #安装官方镜像源 [root@k8s-node02 ~]# curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm...

Docker Toolbox安装

公司最近搭建docker环境,其中会遇到一些问题,在这里记录一下。 先来了解一下docker 一、基本概念 1.Docker中基本概念镜像(Image)  提到镜像,有对操作系统有一定认知的都知道,镜像是一个压缩的ISO文件,里面包含操作系统运行所需要的运行环境以及库文件,配置文件等等。从认识上简单的来说,镜像就是面向对象中的类,相当于一个模板。从本质上来...

Kubernetes (yaml 文件详解)

# yaml格式的pod定义文件完整内容:apiVersion: v1       #必选,版本号,例如v1kind: Pod       #必选,Podmetadata:       #必选,元数据  name: string       #必选,Pod名称  namespace: string    #必选,Pod所属的命名空间  labels:   ...