一、硬件環境
- 準備3臺Linux服務器,此處用Vmware虛擬機。
主機名 | CPU | 內存 |
---|---|---|
k8smaster | 2核 | 4G |
k8snode1 | 2核 | 4G |
k8snode2 | 2核 | 4G |
二、系統前置準備
- 配置三臺主機的hosts文件
cat << EOF > /etc/hosts
192.168.240.130 k8smaster
192.168.240.132 k8snode1
192.168.240.133 k8snode2
EOF
- 設置主機名
hostnamectl set-hostname k8smaster
hostnamectl set-hostname k8snode1
hostnamectl set-hostname k8snode2
- 關閉selinux、禁用swap分區
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
- ipv4流量轉發
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF#讓配置文件生效
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
- 關閉防火墻
systemctl disable firewalld && systemctl stop firewalld
- 同步三臺服務器的時間
yum install ntpdate -y
ntpdate time.windows.com
三、環境安裝
Docker 安裝
- Docker卸載
systemctl stop docker
yum remove -y docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
- Docker 安裝
yum -y install gcc
yum -y install gcc-c++
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce docker-ce-cli containerd.io
systemctl enable docker && systemctl start docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker
k8s安裝
- 配置k8s安裝鏡像
cat <<EOF > kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
mv kubernetes.repo /etc/yum.repos.d/
- 安裝kubeadm 、kubectl、kubelet
yum remove -y kubelet kubeadm kubectl && yum install -y kubelet-1.16.2 kubectl-1.16.2 kubeadm-1.16.2 --disableexcludes=kubernetes
- 設置kubelet開機自啟動
systemctl enable kubelet
master節點配置
- 創建一個k8s的工作目錄,生成一個kubeadm配置文件
mkdir k8s-install && cd k8s-install
kubeadm config print init-defaults > kubeadm.yaml
- 修改配置文件
#修改生成好的配置文件鏡像與版本
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.169.240.130bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: k8smastertaints:- effect: NoSchedulekey: node-role.kubernetes.io/master
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers #修改鏡像源
kind: ClusterConfiguration
kubernetesVersion: v1.16.2 #修改版本
networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16 #pod網絡serviceSubnet: 10.96.0.0/12
scheduler: {}
- 下載kubeadm所需要的鏡像
kubeadm config images pull --config kubeadm.yaml
使用docker images 可查看下載的鏡像信息
- 使用kubeadm 初始化master節點
kubeadm init --config kubeadm.yaml
提示以下信息則表示初始化成功
Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.240.130:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:1877573f37b7fd0bc9d8e38cf8d68f17f51e64a55606f7b657f3cdba79469f16
- 按照提示創建目錄
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看集群節點狀態
kubectl get nodes
此時只有master節點是NotReady狀態
- 將兩臺node節點 加入到master節點中去(kubeadm join 是在master節點上初始化配置時生成的)
kubeadm join 192.168.240.130:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:1877573f37b7fd0bc9d8e38cf8d68f17f51e64a55606f7b657f3cdba79469f16
再次查看master節點信息
- 安裝flannel網絡插件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
編輯kube-flannel.yml
改成虛擬機的網卡名稱
- 下載flannel鏡像
docker pull quay.io/coreos/flannel:v0.11.0-amd64
kubectl create -f kube-flannel.yml
- 查看集群節點狀態
kubectl get pods -A
- master節點的組件
- api-server: api-server是主節點對外開發api的組件,同時提供restful方式,也可以用kubectl方式。
- etcd: 數據存儲組件,api-server會將收到的指令存儲到etcd中。
- sched :負責接收指令,然后選舉合適的node節點,通知節點進行容器的啟停、負載均衡等。
- cm :主節點控制中心,controller-manager。
- node節點的組件
- kubelet : 用于管理節點中的容器啟停,掛載等等。
- kube-proxy : 用于節點間的網絡通信、流量轉發等。
- pod : pod是k8s中的最小調度單位,一個pod中可以包含至少1個容器。多個容器組成了一個pod。