千云物流 -k8s自己部署服务
实验准备环境分别将3台虚拟机命名,设置好对应IP,并将其写入域名解析/etc/hosts中,关闭防火墙,iptables,禁用selinux。还有要做到,时间必须一致。全部禁用swapCPU: 双核Mem: 2G3台linux服务器或者dockerhost时间必须同步主机名IP地址服务master10.10.1.22centos7node0110.10.1.61centos7node0210.10
实验准备环境
分别将3台虚拟机命名,设置好对应IP,并将其写入域名解析/etc/hosts中,关闭防火墙,iptables,禁用selinux。还有要做到,时间必须一致。全部禁用swap
- CPU: 双核
- Mem: 2G
- 3台linux服务器或者dockerhost
- 时间必须同步
- 准备docker环境
主机名 | IP地址 | 服务 |
---|---|---|
master | 10.10.1.22 | centos7 |
node01 | 10.10.1.61 | centos7 |
node02 | 10.10.1.74 | centos7 |
-
安装 kubeadm、kubelet 和 kubectl
你需要在每台机器上安装以下的软件包:kubeadm:用来初始化集群的指令。
kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
kubectl:用来与集群通信的命令行工具。 -
验证时间是否一致
yum install ntpdate
ntpdate -u ntp.api.bz
- 检查docker 情况
// 查询docker安装过的包:
yum list installed | grep docker
//删除安装包:
yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y
//删除镜像/容器等
rm -rf /var/lib/docker
-
给三台机器命名
hostnamectl set-hostname master hostnamectl set-hostname node01 hostnamectl set-hostname node02
-
关闭防火墙和禁用selinux
[root@master ~]# systemctl stop firewalld [root@master ~]# systemctl disable firewalld [root@master ~]# vim /etc/selinux/config
-
禁用swap分区(三台)
[root@master ~]# swapoff -a //临时禁用swap [root@master ~]# free -h [root@master ~]# vim /etc/fstab
-
添加域名解析(三台)
echo 10.10.1.22 master >> /etc/hosts echo 10.10.1.61 node01 >> /etc/hosts echo 10.10.1.74 node02 >> /etc/hosts
-
做免密登陆(三台)
//生成密钥 ssh-keygen -t rsa
-
复制密钥到其他主机
ssh-copy-id node01 ssh-copy-id node02
-
把域名解析复制到其他主机
scp /etc/hosts node01:/etc scp /etc/hosts node02:/etc
-
打开路由转发和iptables桥接功能(三台)
vim /etc/sysctl.d/k8s.conf //写入k8s.conf开启iptables桥接功能 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf sysctl -p /etc/sysctl.d/k8s.conf //如果出现以下错误执行modprobe br_netfilter sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: 没有那个文件或目录 sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: 没有那个文件或目录 //执行从系统的文件加载时候执行 sysctl -p
-
把路由转发和iptables桥接复制到其他主机
scp /etc/sysctl.d/k8s.conf node01:/etc/sysctl.d/ scp /etc/sysctl.d/k8s.conf node02:/etc/sysctl.d/ scp /etc/sysctl.conf node02:/etc/ scp /etc/sysctl.conf node01:/etc/
-
在node1和node2上执行以下命令让路由转发生效(三台)
sysctl -p /etc/sysctl.d/k8s.conf sysctl -p
master节点安装部署k8s
- 使用过程中查看日志
journalctl -xefu kubelet
- 指定yum安装kubernetes的yum源(三台)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
//检查下仓库是否可用
yum repolist
- 创建本地缓存(三台)
yum makecache fast
各节点安装所需安装包
- master下载
yum list installed | grep docker
yum -y remove docker-ce-cli.x86_64
yum list docker-ce --showduplicates|sort -r
yum install docker-ce-18.03.0.ce
systemctl enable docker && sudo systemctl start docker
docker 使用 yum install docker-ce-18.03.0.ce
yum -y install kubeadm-1.15.0-0 kubelet-1.15.0-0 kubectl-1.15.0-0
- node01和node02下载
yum -y install kubeadm-1.15.0-0 kubelet-1.15.0-0
- 三台主机把 kubelet加入开机自启
systemctl enable kubelet
- 从docker镜像站下载镜像
docker pull mirrorgooglecontainers/kube-apiserver:v1.14.1 docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.1 docker pull mirrorgooglecontainers/kube-scheduler:v1.14.1 docker pull mirrorgooglecontainers/kube-proxy:v1.14.1 docker pull mirrorgooglecontainers/pause:3.1 docker pull mirrorgooglecontainers/etcd:3.3.10 docker pull coredns/coredns:1.3.1
- 也可以自己上传导入镜像
忽略
初始化Kubernetes集群
- 指定的两个网络初始化
kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
由于上述设置版本和网络的命令不行,使用下边的命令看到下边的字样
kubeadm init --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap
可以看到让继续执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
//最好记住以下的内容,避免kubeadm reset时候需要执行rm -rf /var/lib/etcd有风险
kubeadm join 10.10.1.22:6443 --token adezmf.s3ldbn3d6nkldqfc \ --discovery-token-ca-cert-hash sha256:5c3126f012ca7f759510bbf4e752227c94aa650f7179cf0bea61508fa2caed89 \ --ignore-preflight-errors=Swap
kubectl get nodes #查看群集节点信息
- 添加网络组件
组件flannel可以通过https://github.com/coreos/flannel中获取kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml //也可以下载下来直接使用 kubectl apply -f xxx.yml kubectl get pods --all-namespaces
如果kube-flannel-ds-dq2kq出现CrashLoopBackOff
检查mirrorgooglecontainers/etcd:3.3.10的镜像是否拉取完成
node01和node02加入群集
这时使用的命令是初始化群集之后生成的令牌(只有24小时的时效) 就是上边让保存的那段代码
kubeadm join 10.10.1.22:6443 --token peoadn.mqtwhfdt2ga82ajc \
--discovery-token-ca-cert-hash sha256:c155cdd834da8747b14a94426e999473116c488bf9c81ba46d02169a1b3243f7 \
--ignore-preflight-errors=Swap
出现以下的日志说明加入成功
kubectl get nodes
检查集群的是否都正常了,出现下边的字样。
kubeadm生成的token重新获取
当你的token忘了或者过期,解决办法如下:
- 先获取token
#重新生成token kubeadm token create #列出token kubeadm token list | awk -F" " '{print $1}' |tail -n 1
- 获取CA公钥的哈希值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^ .* //'
- 从节点加入集群
kubeadm join 192.168.40.8:6443 --token token填这里 --discovery-token-ca-cert-hash sha256:哈希值填这里
k8s部署中遇到的问题
-
在join节点时候出现以下问题日志查看 journalctl -xeu kubelet
failed to run Kubelet: Running with swap on is not supported, please disable swap! or set --fail-swap-on flag to false.
配置忽略swap报错vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--fail-swap-on=false"
-
error execution phase preflight: couldn’t validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s
#生成token kubeadm token generate #根据token输出添加命令 kubeadm token create pmiad9.1g4qrc4yvkqxggse --print-join-command --ttl=0
-
error execution phase kubelet-start: error uploading crisocket: timed out waiting for the condition
swapoff -a kubeadm reset systemctl daemon-reload systemctl restart kubelet iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
docker使用中遇到的问题
- 出现Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?重启下docker
systemctl start docker - 出现 response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 114.114.144.114:53: server misbehaving
配置/etc/docker/daemon.json,这里最好检查下自己的json中是否有空格和别的。这样会导致docker启动不了{ "registry-mirrors":[ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com" ], "insecure-registries":[ "registry-1.docker.io" ] }
更多推荐
所有评论(0)