首頁 > 軟體

K8S安裝

2021-02-28 22:00:07

什麼是K8S

  • kubenetes是一個全新的基於容器技術的分散式架構解決方案,並且是一個一站式的完備的分散式系統開發和支撐平臺。
  • Master節點上執行著叢集管理相關的一組程序:Kube-apiserver,Kube-controller-manager和 Kube-scheduler,這些程序實現了整個叢集的資源管理、Pod排程、彈性伸縮、安全控制、系統監控和儲存等管理功能。
  • Node節點上執行著kubelet,kube-proxy服務程序,這些程序負責Pod的建立、啟動、監控、重啟、銷燬、以及實現軟體模式的負載均衡器。

為什麼使用K8S

  • 新技術的驅動
  • Docker容器化技術已經被很多公司採用,從單機走向叢集已成必然,雲端計算的發展正在加速這一程序
  • 全面擁抱微服務(微服務架構使得每個服務都可以獨立開發,升級和擴充套件,因此係統具備很高的穩定性和快速迭代能力,開發者也可以自由選擇開發技術。)
  • K8S提供的服務彈性擴容機制面對突發流量

概念和術語

  • Master是叢集管理的控制節點,基本上所有的命令都發給它,它負責具體的執行過程。
  • Node是K8s中的工作負載節點,每個node都會被master分配一些工作負載。
  • Pod是K8s最小執行單元。
  • Replication Controller (RC)副本控制,宣告Pod的副本數量在任意時刻都符合某個預期值。
  • Deployment 在內部使用Replica Set(Replocation Controller的升級)實現部署。
  • Horizontal Pod Autoscaler(HPA) Pod橫向自動擴容;指標:CUP,QPS,TPS。
  • StatefulSet 有狀態服務。
  • Service 就是我們經常提起的微服務架構中的一個一個微服務。

安裝K8S [kubeadm方式]

主機 型別 作業系統
192.168.124.180 Master Centos 7
192.168.124.181 Node Centos 7
192.168.124.182 Node Centos 7

設定主機名

hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2

# 修改 /etc/hosts
192.168.124.180 master
192.168.124.181 node1
192.168.124.182 node2

關閉防火牆|禁用SELinux|關閉交換分割區

# 禁用主機SELinux,讓容器可以讀取主機檔案系統
setenforce 0
# 關閉防火牆
systemctl disable firewalld
systemctl stop firewalld
# #實時動態關閉交換分割區
swapoff -a 
# 註釋 swap 行
vim /etc/fstab

Yum 國內源

cd /etc/yum.repos.d  && 
sudo mv CentOS-Base.repo CentOS-Base.repo.bak && 
sudo wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && 
yum clean all && 
yum makecache

設定k8s資源的下載地址

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安裝Docker並且替換Docker源

Docker 安裝

# 換源
mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

service docker restart

安裝K8S

yum install kubelet kubeadm kubectl 

下載k8s依賴映象

獲取依賴的映象

kubeadm config images list

阿里雲映象下載k8s依賴元件

kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g' |sh -x

docker images |grep registry.cn-hangzhou.aliyuncs.com/google_containers |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#registry.cn-hangzhou.aliyuncs.com/google_containers#k8s.gcr.io#2' |sh -x

docker images |grep registry.cn-hangzhou.aliyuncs.com/google_containers |awk '{print "docker rmi ", $1":"$2}' |sh -x

開機啟動

systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet

使用kubeadm安裝Master

kubeadm config print init-defaults > init.default.yaml
kubeadm init --config=init.default.yaml

修改init.default.yaml

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  # 修改為master的ip地址
  advertiseAddress: 192.168.124.180
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master
  taints:
  - effect: NoSchedule
    key: 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: k8s.gcr.io
kind: ClusterConfiguration
# 修改版本為v1.17.2
kubernetesVersion: v1.17.2
networking:
  dnsDomain: cluster.local
  # 新增pod網段
  podSubnet: "10.224.0.0/16"
  serviceSubnet: 10.96.0.0/12
scheduler: {}
### 使用ipvs
### yum install ipvsadm 
### 檢視 ipvsadm -Ln
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
  SupportIPVSProxyMode: true
mode: ipvs


# 安裝成功之後執行以下命令

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You 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.124.180:6443 --token abcdef.0123456789abcdef 
    --discovery-token-ca-cert-hash sha256:58056cdd9dfd9cc91da880adc63a2a7e9e7594eeda1bf7c2bcdceb0fbbf255ad 

安裝網路外掛flannel

kubectl create -f kube-flannel.yml
# 檢視node還是處於NoReay狀態
kubectl get node
# NAME         STATUS     ROLES    AGE     VERSION
# k8s-master   NotReady   master   5h41m   v1.17.2
# NAME         STATUS   ROLES    AGE     VERSION
# k8s-master   Ready    master   5h59m   v1.17.2

叢集

  • node1和node2加入節點執行
kubeadm join 192.168.124.183:6443 --token abcdef.0123456789abcdef 
    --discovery-token-ca-cert-hash sha256:58056cdd9dfd9cc91da880adc63a2a7e9e7594eeda1bf7c2bcdceb0fbbf255ad 
  • 檢測叢集是否安裝完成
kubectl get node
kubectl get pods --all-namespaces

問題

虛擬機器器設定比較低,所以會出現一些錯誤,我們可以按照提示忽略【非生產環境】

[ERROR NumCPU CPU] 必須超過2個,把虛擬機器器的處理器設定一下即可。
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables] 解決:echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables
[ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty 解決:清空/var/lib/etcd 目錄
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1 解決: echo '1' > /proc/sys/net/ipv4/ip_forward

https://blog.csdn.net/wangxinxinsj/article/details/90768030

https://blog.csdn.net/wangmiaoyan/article/details/101216496


IT145.com E-mail:sddin#qq.com