安裝配置操作系統(tǒng)
變更主機名稱
vim /etc/hostname
1荔泳、vi /etc/sysconfig/network-scripts/ifcfg-<按tab鍵補齊>選第一個局蚀,然后修改該文件以下內(nèi)容:
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.3.20
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=8.8.8.8
DNS2=114.114.114.114
2蝉娜、最小化安裝centos7馏予,并換源
yum install wget
cd /etc/yum.repos.d
sudo mv CentOS-Base.repo CentOS-Base.repo.backup
sudo wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3乐尊、重啟網(wǎng)絡(luò)
systemctl restart NetworkManager
4雳刺、關(guān)閉SELinux
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
5劫灶、啟用透明偽裝(transparent masquerading)實現(xiàn)虛擬擴展局域網(wǎng)(VxLAN)在Kubernetes pods集群通信。
modprobe br_netfilter
也可以啟用防火墻IP偽裝
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
6掖桦、設(shè)置iptables橋接包轉(zhuǎn)換規(guī)則
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
加載新規(guī)則
sysctl --system
7浑此、停用內(nèi)存swap區(qū)增加性能(在/etc/fstab文件中注釋掉swap分區(qū))
swapoff -a
8、安裝docker
如果以前安裝過docker則進行刪除
rpm -aq | grep docker
yum remove docker*
首先在http://mirror.centos.org/centos/7/extras/x86_64/Packages/安裝container-selinux
yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
通過https://download.docker.com/linux/centos/7/x86_64/stable/Packages/下載自動安裝docker最新版本的containerd.io滞详、docker-ce-cli凛俱、docker-ce(注意順序):
yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el7.x86_64.rpm
yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-20.10.0-3.el7.x86_64.rpm
yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-20.10.0-3.el7.x86_64.rpm
安裝完成后使用 docker --version 命令檢查版本如下:
啟動docker
sudo systemctl start docker
9紊馏、查看docker版本
docker version
10、顯示docker鏡像蒲犬,現(xiàn)在為空
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
接下來安裝Kubernetes
安裝Kubernetes主和工作節(jié)點
1朱监、安裝kubelet kubeadm kubectl (需要掛代理)
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
EOF
yum install -y kubelet kubeadm kubectl
開啟Kubernetes服務(wù)并加入系統(tǒng)啟動項
systemctl enable kubelet
systemctl start kubelet
配置Kubernetes Master主節(jié)點
Kubernetes安裝完成后,需要配置形成一個集群原叮。
1赫编、防火墻上打開Kubernetes必要端口
firewall-cmd --zone=public --permanent --add-port={6443,2379,2380,10250,10251,10252}/tcp
3、允許從另外一個node節(jié)點訪問docker奋隶,把下面的worker-IP-address換換成你自己的IP地址
firewall-cmd --zone=public --permanent --add-rich-rule 'rule family=ipv4 source address=worker-IP-address/32 accept'
4擂送、允許docker容器訪問主機地址
firewall-cmd --zone=public --permanent --add-rich-rule 'rule family=ipv4 source address=172.17.0.0/16 accept'
5、防火墻變更生效
firewall-cmd --reload
6唯欣、Kubernetes上安裝CNI(容器網(wǎng)絡(luò)接口)插件
設(shè)置之前安裝使用Calico:https://docs.projectcalico.org/getting-started/kubernetes/quickstart#overview
簽發(fā)IP地址
kubeadm init --pod-network-cidr 192.168.0.0/16 --image-repository registry.aliyuncs.com/google_containers
執(zhí)行完上述命令后生成以下內(nèi)容
通過以下樣例嘹吨,創(chuàng)建一個令牌,并把工作node節(jié)點加入到集群中境氢。下面僅是示例(拷貝上面生成內(nèi)容):
kubeadm join 192.168.3.20:6443 --token qq6mk0.iueunemhd3quzd7u \
--discovery-token-ca-cert-hash sha256:ae3b7314f604916175538fbc9f8f0322f892a0fb260aee4de4b4bb0d46608f99
創(chuàng)建目錄和配置文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
7蟀拷、在Master上啟用pod。僅用于演示并不推薦在生產(chǎn)環(huán)境使用(生產(chǎn)環(huán)境用工作節(jié)點萍聊,不在Master上配置)问芬。
kubectl taint nodes --all node-role.kubernetes.io/master-
8、驗證Master節(jié)點是否啟用
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 91s v1.18.0
配置Kubernetes工作node節(jié)點
1寿桨、開放Kubernetes端口
firewall-cmd --zone=public --permanent --add-port={10250,30000-32767}/tcp
2此衅、加載變更
firewall-cmd --reload
3、使用令牌加入集群(以Master生成內(nèi)容為準)
kubeadm join 192.168.3.20:6443 --token qq6mk0.iueunemhd3quzd7u \
--discovery-token-ca-cert-hash sha256:ae3b7314f604916175538fbc9f8f0322f892a0fb260aee4de4b4bb0d46608f99 \
--ignore-preflight-errors=all
4亭螟、查看工作節(jié)點是否成功加入
返回Master節(jié)點輸入以下命令
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 10m v1.18.0
worker Ready <none> 28s v1.18.0
完成kubernetes基本設(shè)置
如果配置出錯重新設(shè)置挡鞍,在Master主節(jié)點和工作節(jié)點上執(zhí)行以下命令
kubeadm reset && rm -rf /etc/cni/net.d
在Kubernetes中安裝本地docker鏡像
1、創(chuàng)建工程文件夾goweb媒佣。
2匕累、創(chuàng)建dockerfile文件命名為“Dockerfile"陵刹,文件內(nèi)容如下:
# 使用ubuntu開啟
FROM ubuntu
LABEL maintainer="zhi@zhizhicloud.com"
# 拷貝編譯程序
COPY . /app
WORKDIR /app
# 打開8080端口
EXPOSE 8080
# 運行!
CMD ["./main"]
3默伍、創(chuàng)建一個template文件夾,在文件夾下創(chuàng)建命名為index.html衰琐,文件中填寫如下代碼:
<h1>歡迎使用docker</h1>
<p>這個一個go web docker程序</p>
4也糊、使用go程序編寫一個web服務(wù)
package main
import (
"fmt"
"html/template"
"log"
"net/http"
)
func IndexHandler(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles("templates/index.html")
if err != nil {
log.Println(err)
}
err = t.Execute(w,nil)
if err != nil {
log.Println(err)
}
}
func main() {
http.HandleFunc("/",IndexHandler)
fmt.Println("服務(wù)端口:8000") //控制臺輸出信息
err := http.ListenAndServe(":8000", nil) //設(shè)置監(jiān)聽的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
5、編譯程序羡宙、創(chuàng)建鏡像
windows下跨平臺編譯linux文件需要設(shè)置以下變量:
set GOARCH=amd64
set GOOS=linux
go build -o main
$ sudo start docker #開啟docker服務(wù)
$ sudo docker build -t webserver -f Dockerfile .
執(zhí)行docker images命令查看生成的鏡像文件狸剃,如下圖:
配置containerd(kubernets 1.20開始不直接支持docker,用containerd替換)
1狗热、配置containerd
sudo mkdir -p /etc/containerd
sudo containerd config default > /etc/containerd/config.toml
2钞馁、重啟containerd
sudo systemctl restart containerd
6虑省、創(chuàng)建webserver.yml文件,內(nèi)容如下(IP地址替換為Master節(jié)點IP):
apiVersion: apps/v1
kind: Deployment
metadata:
name: webserver2
spec:
replicas: 1
selector:
matchLabels:
app: webserver2
template:
metadata:
labels:
app: webserver2
spec:
containers:
- name: webserver2
image: webserver:latest
imagePullPolicy: Never
ports:
- containerPort: 8000
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: webserver2
spec:
type: NodePort
ports:
- port: 8000
targetPort: 8000
protocol: TCP
selector:
app: webserver2
externalIPs:
- 192.168.3.20
執(zhí)行以下命令創(chuàng)建kubernetes容器
kubectl create -f webserver.yml
執(zhí)行結(jié)果如下: