安裝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
進行時間校時(用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
啟動kubelet:
#開機啟動kubelet
systemctl enable kubelet
下載Master節點需要的鏡像(在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節點初始化(在Master上執行)
執行kubeadm init初始化命令:
kubeadm init --kubernetes-version=v1.16.2 --apiserver-advertise-address=192.168.0.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.1.0.0/16
- --kubernetes-version=v1.16.2 : 加上該參數后啟動相關鏡像(剛才下載的那一堆)
- --pod-network-cidr=10.244.0.0/16 :(Pod 中間網絡通訊我們用flannel,flannel要求是10.244.0.0/16,這個IP段就是Pod的IP段)
- --service-cidr=10.1.0.0/16 : Service(服務)網段(和微服務架構有關)
在初始化結果輸出里找到類似下面這段信息:
kubeadm join 192.168.0.4:6443 --token 4tylf5.av0mhvxmg7gorwfz \
--discovery-token-ca-cert-hash sha256:e67d5f759dd248a81b2e79cd8f9250b44c41d4102ef433d0f0e26268b90a10e8
后面Node1節點加入集群會用到。
初始化成功后執行:
#把密鑰配置加載到自己的環境變量里
export KUBECONFIG=/etc/kubernetes/admin.conf
#每次啟動自動加載$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
下載Node1節點需要的鏡像(在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上執行)
加入集群網絡:
kubeadm join 192.168.0.4:6443 --token 4tylf5.av0mhvxmg7gorwfz \
--discovery-token-ca-cert-hash sha256:e67d5f759dd248a81b2e79cd8f9250b44c41d4102ef433d0f0e26268b90a10e8
在Master上安裝flannel(在Master上執行)
參照官網執行:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
檢查
完成后觀察Master上運行的pod,執行kubectl get -A pods -o wide:
執行kubectl get nodes查看節點:
查看各個服務器上的鏡像文件: