安装Kubernetes V1.16.2

安装Kubernetes V1.16.2

准备硬件环境

利用VirtualBox准备两台Linux虚拟机(K8S集群2台起步),系统用CentOS(我用的是的CentOS-7-x86_64-DVD-1810),虚拟机配置是2颗CPU和2G内存(K8S最低要求的配置),网络使用桥接网卡方式并使用静态IP:

  • 192.168.0.4 K8S集群-Master(CentOS-1)
  • 192.168.0.7 K8S集群-Node1(CentOS-2)

将虚拟机系统安装好,配置好网络设置。

安装Kubernetes(两台都要操作)

安装前准备(两台都要操作)

在两台虚拟机上都进行以下操作:
关闭防火墙:

systemctl disable firewalld
systemctl stop firewalld
知识兔

修改服务器名称:

//将192.168.0.4的服务器名称修改为master
hostnamectl set-hostname master  

//将192.168.0.7的服务器名称修改为node1
hostnamectl set-hostname node1  
知识兔

修改Hosts文件:

vi /etc/hosts

192.168.0.4 master
192.168.0.7 node1
知识兔

进行时间校时(用aliyun的NTP服务器):

yum install -y ntp
ntpdate ntp1.aliyun.com
知识兔

安装软件(两台都要安装)

安装常用软件:

yum update

yum install wget

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
知识兔

安装Docker:

cd /etc/yum.repos.d/

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

yum -y install docker-ce
知识兔

安装kubelet kubeadm kubectl (需要VPN):

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
知识兔

安装后设置(两台都要安装)

关闭SELINUX:

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
知识兔

设置iptables:

cd /etc/sysctl.d/

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system
知识兔

启动Docker:

systemctl start docker
#开机启动Docker
systemctl enable docker
知识兔

关闭SWAP:

vi /etc/fstab
注释swap分区
# /dev/mapper/centos-swap swap                    swap    defaults        0 0

#保存退出vi后执行
swapoff -a
知识兔

添加国内Docker镜像:

vi etc/docker/daemon.json #文件不存在就创建

#请在该配置文件中加入:

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

#保存退出后执行
sudo systemctl daemon-reload
sudo systemctl restart docker
知识兔

启动kubelet:

#开机启动kubelet
systemctl enable kubelet
知识兔

下载Master节点需要的镜像

因为k8s.gcr.io访问不了,手动下载docker镜像,Master需要下载的镜像如下:

  • k8s.gcr.io/kube-apiserver:v1.16.2
  • k8s.gcr.io/kube-controller-manager:v1.16.2
  • k8s.gcr.io/kube-scheduler:v1.16.2
  • k8s.gcr.io/kube-proxy:v1.16.2
  • k8s.gcr.io/pause:3.1
  • k8s.gcr.io/etcd:3.3.15-0
  • k8s.gcr.io/coredns:1.6.2
  • quay.io/coreos/flannel:v0.11.0-amd64
docker pull bluersw/kube-apiserver:v1.16.2 #替代docker pull k8s.gcr.io/kube-apiserver:v1.16.2
docker tag bluersw/kube-apiserver:v1.16.2 k8s.gcr.io/kube-apiserver:v1.16.2

docker pull bluersw/kube-controller-manager:v1.16.2 #替代docker pull k8s.gcr.io/kube-controller-manager:v1.16.2
docker tag bluersw/kube-controller-manager:v1.16.2 k8s.gcr.io/kube-controller-manager:v1.16.2

docker pull bluersw/kube-scheduler:v1.16.2 #替代docker pull k8s.gcr.io/kube-scheduler:v1.16.2
docker tag bluersw/kube-scheduler:v1.16.2 k8s.gcr.io/kube-scheduler:v1.16.2

docker pull bluersw/kube-proxy:v1.16.2 #替代docker pull k8s.gcr.io/kube-proxy:v1.16.2
docker tag bluersw/kube-proxy:v1.16.2 k8s.gcr.io/kube-proxy:v1.16.2

docker pull bluersw/pause:3.1 #替代docker pull k8s.gcr.io/pause:3.1
docker tag bluersw/pause:3.1 k8s.gcr.io/pause:3.1

docker pull bluersw/etcd:3.3.15-0 #替代docker pull k8s.gcr.io/etcd:3.3.15-0
docker tag bluersw/etcd:3.3.15-0 k8s.gcr.io/etcd:3.3.15-0

docker pull bluersw/coredns:1.6.2 #替代docker pull k8s.gcr.io/coredns:1.6.2
docker tag bluersw/coredns:1.6.2 k8s.gcr.io/coredns:1.6.2

docker pull bluersw/flannel:v0.11.0-amd64 #替代 docker pull quay.io/coreos/flannel:v0.11.0-amd64
docker tag bluersw/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
知识兔

Master节点初始化

执行kubeadm init初始化命令:

kubeadm init  --kubernetes-version=v1.16.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
知识兔

如果希望详细的初始化日志输出可以增加--dry-run参数。

  • --kubernetes-version=v1.16.2 : 加上该参数后启动相关镜像(刚才下载的那一堆)
  • --pod-network-cidr=10.244.0.0/16 :(Pod 中间网络通讯我们用flannel,flannel要求是10.244.0.0/16)
  • --service-cidr=10.96.0.0/12 : Service(服务)网段(和微服务架构有关)

在初始化结果输出里找到类似下面这段信息:

kubeadm join 192.168.0.4:6443 --token 4tylf5.av0mhvxmg7gorwfz \
    --discovery-token-ca-cert-hash sha256:e67d5f759dd248a81b2e79cd8f9250b44c41d4102ef433d0f0e26268b90a10e8
知识兔

后面Node1节点加入集群会用到。

初始化成功后执行:

#复制链接集群的密钥配置到Node1服务器上,如果有多台都要复制
scp /etc/kubernetes/admin.conf node1:/etc/kubernetes/admin.conf

#把密钥配置加载到自己的环境变量里
export KUBECONFIG=/etc/kubernetes/admin.conf

echo "source <(kubectl completion bash)" >> ~/.bashrc

#每次启动自动加载$HOME/.kube/config下的密钥配置文件(K8S自动行为)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
知识兔

在Master上安装flannel

参照官网执行:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
知识兔

完成后观察Master上运行的容器:

执行kubectl get nodes查看节点:

下载Node1节点需要的镜像

因为k8s.gcr.io访问不了,手动下载docker镜像,Node1需要下载的镜像如下:

  • k8s.gcr.io/pause:3.1
  • k8s.gcr.io/kube-proxy:v1.16.2
  • quay.io/coreos/flannel:v0.11.0-amd64
docker pull bluersw/kube-proxy:v1.16.2 #替代docker pull k8s.gcr.io/kube-proxy:v1.16.2
docker tag bluersw/kube-proxy:v1.16.2 k8s.gcr.io/kube-proxy:v1.16.2

docker pull bluersw/pause:3.1 #替代docker pull k8s.gcr.io/pause:3.1
docker tag bluersw/pause:3.1 k8s.gcr.io/pause:3.1

docker pull bluersw/flannel:v0.11.0-amd64 #替代 docker pull quay.io/coreos/flannel:v0.11.0-amd64
docker tag bluersw/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
知识兔

Node1服务器加入集群网络

在Node1上执行以下命令,我们在上面Master节点上已经将admin.conf拷贝到Node1上:

#在node上执行就可以使用kubectl的相关命令了
mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

echo "source <(kubectl completion bash)" >> ~/.bashrc
知识兔

加入集群网络:

kubeadm join 192.168.0.4:6443 --token 4tylf5.av0mhvxmg7gorwfz \
    --discovery-token-ca-cert-hash sha256:e67d5f759dd248a81b2e79cd8f9250b44c41d4102ef433d0f0e26268b90a10e8
知识兔

完成后查看是否正常:

源码

Github仓库:https://github.com/sunweisheng/Kubernetes

计算机