kubeadm安装kubernetes1.14.1

分别设置主机名为master1 node1 … 时区
timedatectl set-timezone Asia/Shanghai #都要执行
hostnamectl set-hostname master1 #master1执行
hostnamectl set-hostname node1 #node1执行

在所有节点/etc/hosts中添加解析,master1,node1
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.4.130 matser1
192.168.4.131 node1

关闭所有节点的seliux以及firewalld

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

setenforce 0
systemctl disable firewalld
systemctl stop firewalld

关闭swap,及修改iptables,不然后面kubeadm会报错

swapoff -a && sed -i "s/\/dev\/mapper\/centos-swap/\#\/dev\/mapper\/centos-swap/g" /etc/fstab
 cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
net.ipv4.ip_forward = 1
EOF

使配置生效
sysctl --system
如果net.bridge.bridge-nf-call-iptables报错,加载br_netfilter模块
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

kube-proxy开启ipvs的前置条件 【master和node都需要执行】

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
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 && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

安装Docker【master和node都需要执行】
安装docker的yum源:
yum install -y yum-utils device-mapper-persistent-data lvm2
wget -O /etc/yum.repos.d/docker-ce http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce
输入docker info,记录Cgroup Driver Cgroup Driver: cgroupfs docker和kubelet的cgroup driver需要一致,如果docker不是cgroupfs,则执行

cat << EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"]  // 默认cgroupfs,k8s官方推荐systemd,否则初始化出现Warning
}
EOF

启动docker,并设置为开机自启
systemctl start docker && systemctl enable docker

检查确认docker的Cgroup Driver信息:

[root@k8s-master ~]# docker info |grep Cgroup
Cgroup Driver: systemd

安装kubeadm,kubectl,kubelet
wget -O /etc/yum.repos.d/docker-ce http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

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

下在镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1
docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1

master都可以用脚本下载镜像:

#!/bin/bash

set -e

KUBE_VERSION=v1.14.1
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.10
CORE_DNS_VERSION=1.3.1

GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers

images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})


for imageName in ${images[@]} ; do
  docker pull $ALIYUN_URL/$imageName
  docker tag  $ALIYUN_URL/$imageName $GCR_URL/$imageName
  docker rmi $ALIYUN_URL/$imageName
done

kubeadm init 部署master节点
只在master执行。此处选用最简单快捷的部署方案。etcd、api、controller-manager、 scheduler服务都会以容器的方式运行在master。etcd 为单点,不带证书。etcd的数据会挂载到master节点/var/lib/etcd
init部署是支持etcd 集群和证书模式的,配置方法见我1.9的文档,此处略过。
init命令注意要指定版本,和pod范围
kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=192.168.10.0/16 --apiserver-advertise-address=10.10.10.36 --ignore-preflight-errors=Swap

记下join的命令,后续node节点加入的时候要用到
执行提示的命令,保存kubeconfig
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config

此时执行kubectl get node 已经可以看到master节点,notready是因为还未部署网络插件
kubectl get node

NAME STATUS ROLES AGE VERSION
master1 NotReady master 3m9s v1.14.1

查看所有的pod,kubectl get pod --all-namespaces
coredns也依赖于容器网络,此时pending是正常的
kubectl get pod --all-namespaces

NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-fb8b8dccf-8wdn8 0/1 Pending 0 2m21s
kube-system coredns-fb8b8dccf-rsnr6 0/1 Pending 0 2m21s
kube-system etcd-master1 1/1 Running 0 89s
kube-system kube-apiserver-master1 1/1 Running 0 94s
kube-system kube-controller-manager-master1 1/1 Running 0 89s
kube-system kube-proxy-9nl4m 1/1 Running 0 2m21s
kube-system kube-scheduler-master1 1/1 Running 0 106s

部署flannel网络
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl create -f kube-flannel.yml

或者安装calico
Calico官网:https://docs.projectcalico.org/v3.6/getting-started/kubernetes/

kubectl apply -f
https://docs.projectcalico.org/v3.5/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

网络就绪后,节点的状态会变为ready
[root@master1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master1 Ready master 11m v1.14.1

kubeadm join 加入node节点
node节点加入集群
使用之前kubeadm init 生产的join命令,加入成功后,回到master节点查看是否成功
kubeadm join 192.168.4.130:6443 --token 911xit.xkp2gfxbvf5wuqz7 \

--discovery-token-ca-cert-hash sha256:23db3094dc9ae1335b25692717c40e24b1041975f6a43da9f43568f8d0dbac72 

[root@master1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master1 Ready master 12m v1.14.1
node1 Ready 9m52s v1.14.1

node下载镜像

#!/bin/bash

set -e

KUBE_VERSION=v1.14.1
KUBE_PAUSE_VERSION=3.1

GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers

images=(kube-proxy-amd64:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION})


for imageName in ${images[@]} ; do
  docker pull $ALIYUN_URL/$imageName
  docker tag  $ALIYUN_URL/$imageName $GCR_URL/$imageName
  docker rmi $ALIYUN_URL/$imageName
done

如果忘了join命令,加入节点方法
此处未更新,沿用1.12
若node已经成功加入,忽略这一步。
使用场景:忘了保存上面kubeadm init生产的join命令,可按照下面的方法加入node节点。
首先master节点获取token,如果token list内容为空,则kubeadm token create创建一个,记录下token数据
kubeadm token list
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
wct45y.tq23fogetd7rp3ck 22h 2018-04-26T21:38:57+08:00 authentication,signing The default bootstrap token generated by ‘kubeadm init’. system:bootstrappers:kubeadm:default-node-token

node节点执行如下,把token部分进行替换
kubeadm join --token wct45y.tq23fogetd7rp3ck 192.168.1.181:6443 --discovery-token-unsafe-skip-ca-verification

部署k8s ui界面,dashboard
dashboard是官方的k8s 管理界面,可以查看应用信息及发布应用。dashboard的语言是根据浏览器的语言自己识别的
官方默认的dashboard为https方式,如果用chrome访问会拒绝。本次部署做了修改,方便使用,使用了http方式,用chrome访问正常。
修改方法可以查看我简书中另一篇文档,修改dashboard 为http方式
一共需要导入3个yaml文件
文件地址 https://github.com/cai11745/k8s-ocp-yaml/tree/master/yaml-file/dashboard-1.10.1
kubectl apply -f kubernetes-dashboard.yaml
kubectl apply -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml

[root@master1 ~]# kubectl -n kube-system get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP,9153/TCP 32m
kubernetes-dashboard NodePort 10.97.8.30 443:32001/TCP,80:32000/TCP 13m

node节点pod无法启动/节点删除网络重置
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl start docker

如果虚拟网络不同
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值